在较旧版本的bash上,不存在某些变量/参数扩展。
一个示例将变量扩展为提示字符串:
echo ${PS1@P}
在较旧版本的bash上,即使我这样做:
$ echo "${PS1@P}" &> /dev/null
我仍然看到:
bash: ${PS1@P}: bad substitution
请注意,STDOUT和STDERR均已在上面重定向。
如何静默扩展参数并检查其是否有效?
答案 0 :(得分:2)
使用eval
时,重定向STDERR起作用:
eval 'str="${PS1@P}";' 2>/dev/null || echo fail
这时,您将看到fail
或变量$str
将包含提示的扩展名。
注释:
@Charles Duffy
在注释中指出,{
}
周围的内容将因失败而中止,而不会在fail
中打印bash 4.3.48
。
另一种选择是使用子外壳。