BASH:为什么printf返回1?

BASH:为什么printf返回1?,bash,printf,return-value,Bash,Printf,Return Value,我有一个问题,煤气灯照亮了我 下面是我的bash脚本“foo”,简化为问题: #!/bin/bash function Args() { [[ "$1" == "-n" ]] && [[ -d "$2" ]] && printf "%s\n" "new ${3}" [[ "$1" == "-p" ]] && [[ -d "$2" ]] && printf "%s\n" "page ${3}" } [[ $# -e

我有一个问题,煤气灯照亮了我

下面是我的bash脚本“foo”,简化为问题:

#!/bin/bash

function Args()
{
    [[ "$1" == "-n" ]] && [[ -d "$2" ]] && printf "%s\n" "new ${3}"
    [[ "$1" == "-p" ]] && [[ -d "$2" ]] && printf "%s\n" "page ${3}"
}

[[ $# -eq 3 ]] && Args "$@"
echo $?
现在,当我执行此代码时,会发生以下情况:

$ ./foo -n / bar
new bar
1
然而,这是可行的:

$ ./foo -p / bar
page bar
0
请问,有人能解释一下吗


抱歉,如果这是一个已知的“事情”,我的谷歌搜索技能必须提高…

在第一种情况下,它返回
1
,只是因为第二种情况:

[[ "$1" == "-p" ]] && [[ -d "$2" ]] && printf "%s\n" "page ${3}"
当您将脚本调用为时,将不匹配/应用:

./foo -n / bar
./foo -p / bar
由于第二组条件不匹配,它将向您返回1,因为
$?
表示最新命令的退出状态,实际上是第二组条件的退出状态

当您将脚本称为:

./foo -n / bar
./foo -p / bar

自从第2行被执行以来,它将向您返回状态
0
,这也是最近执行的一行。

AHHH,我这个笨蛋!我知道问题所在。。谢谢你