bash - 使用$?在 bash 函数中

标签 bash return-value

我在函数内测试 $? 时遇到问题,无论它是如何传递的。

__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/

相关文章:

linux - grep 进程的 PID - Unix

c - 结构返回错误-C

return-value - 显式命名的返回值?

java - 如何在使用方法输出并返回结果时计算字符串中的元音和辅音并将首字母大写

r - 在列中查找值返回 TRUE/FALSE

c - POSIX 函数的返回值

linux shell `sed` 结果到变量 ,`line 51: 422: command not found`

regex - 使用正则表达式从序列中拆分字符串

bash - 限制 SLURM 中正在运行的作业数量

linux - Grep:仅显示正则表达式组中匹配的内容