2014-04-01 70 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