安静的bash:$ {PS1 @ P}:替代错误消息

时间:2018-09-25 14:52:07

标签: bash

在较旧版本的bash上,不存在某些变量/参数扩展。

一个示例将变量扩展为提示字符串:

echo ${PS1@P}

在较旧版本的bash上,即使我这样做:

$ echo "${PS1@P}" &> /dev/null

我仍然看到:

bash: ${PS1@P}: bad substitution

请注意,STDOUT和STDERR均已在上面重定向。

如何静默扩展参数并检查其是否有效?

1 个答案:

答案 0 :(得分:2)

使用eval时,重定向STDERR起作用:

eval 'str="${PS1@P}";' 2>/dev/null || echo fail

这时,您将看到fail或变量$str将包含提示的扩展名。

注释:

@Charles Duffy在注释中指出,{ }周围的内容将因失败而中止,而不会在fail中打印bash 4.3.48

另一种选择是使用子外壳。