2014-04-01 69 views
1

我有一个问题,gaslights我。BASH:为什么`printf`返回1?

这才是我的bash脚本 “富” 降低的问题:

#!/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 "[email protected]" 
echo $? 

现在,当我执行这个代码,会发生以下情况:

$ ./foo -n/bar 
new bar 
1 

然而,这作品:

$ ./foo -p/bar 
page bar 
0 

请问,有谁能解释一下吗?

很抱歉,如果这是一个已知的“东西”,我的googleing技能有待提高......

+0

AHHH,我笨的菜鸟!我知道这个问题..谢谢反正 –

回答

2

它是在第一种情况下返回1只是因为第2条件:

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

不匹配/当你打电话给你的脚本应用为:

./foo -n/bar 

而且由于第二组条件的不匹配,因为$?表示它将返回1到你最近的命令的退出状态实际上是第二组条件的退出状态。

当你打电话给你的脚本:

./foo -p/bar 

因为二号线被执行,则返回状态0给你,这也是最近执行的一个。

+0

谢谢!我将在5分钟内解决这个尴尬的问题。 –

+0

不客气,很高兴它的工作。 – anubhava