2017-05-30 47 views
2

我試圖提取選項後傳遞的字符串:如何在bash上的選項之後讀取字符串?

如。

./install -s service1 service2 

if [ -z ${1} ] ; then 
    echo "No option provided, defaulting to (-h)elp." 
    echo 
    option="-h" 
else 
    option=$1 

fi 

我想從參數列表中提取「service1 service2」。如何做到這一點?

+2

你想看看['getopts'(http://wiki.bash-hackers.org/howto/getopts_tutorial)。 –

+1

'[-z $ {1}]'已經很壞了。使用'[-z'$ 1「]' - 大括號沒有任何用處,引號是必不可少的。如果你的腳本已經用'./yourscript「非空-o 1 = 1」'運行,那麼你會有'[-z $ {1}]'返回true,儘管該值根本不是空的。如果你的腳本是用'./yourscript'*''調用的,那麼測試的行爲將取決於當前工作目錄中存在哪些文件名。 –

+0

同樣,即使'[-z $ 1]'*看起來像*它的工作原理,它這樣做的完全不直觀的原因:'[-z]',它解析到,等同於'[-n -z] ',測試字符串'「-z」'是否爲空,並返回一個真值,如果字符串不是**,實際上是空的。 –

回答

1

您可以使用shift和特殊變量[email protected]

option=$1 
shift 
echo "[email protected]" 

返回

service1 service2 

如前所述,如果有getopts是一個不錯的選擇。

相關問題