我在函数内测试 $?
时遇到问题,无论它是如何传递的。
__myretval () {
if [ $1 -ne 0 ]; then
printf -- "%s" "$1"
fi
}
PS1="$(__myretval '$?') $"
目标是让 retvals 在不为 0 时显示。函数比这更详细,它必须在函数中,请不要建议将其从函数中拉出。
$ false
1 $ true
$
我尝试了所有我能想到的组合,但似乎没有任何效果,包括但不限于以下组合。我试过将值放在引号中,不带引号;我试过对 0 做同样的事情,带引号和不带引号。
if [ $1 -ne 0 ]; then
if [ $1 != 0 ]; then
if [ $? -ne 0 ]; then
if [ $? != 0 ]; then
PS1="$(__myretval "$?") $"
PS1="$(__myretval "\$?") $"
要么总是打印值,要么从不打印值。
最佳答案
这对我有用:
__myretval () {
if (($1)); then
printf -- "%s" "$1"
fi
}
PS1='$(__myretval "$?") $'
您的问题似乎出在引号上。
当你说:
PS1="$(__myretval '$?') $"
你正在做的是(因为双引号):将 PS1
设置为函数 __myretval
的输出,参数为 '$?'
,其中$?
现在 已展开。所以你的 PS1
永远不会改变。
您想要的是包含字符串的 PS1
:
$(__myretval "$?") $
以便在每个新提示时扩展(评估)此字符串。这就是为什么您应该使用单引号 来定义您的PS1
。
关于bash - 使用$?在 bash 函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312266/