2016-08-20 60 views
3

我在學習bash。在一些教程中,我找到了選擇循環。但它不適用於我的MAC OS或Linux。我的代碼是這樣的:bash選擇循環不起作用

#!/bin/bash 
names="Kyle Cartman Stan Quit" 
PS3="Select character: " 
select name in $names 
    do 
    echo "name="$name 
done 

我用./test.sh調用這個程序,結果是這樣的:

1) Kyle 
2) Cartman 
3) Stan 
4) Quit 
Select character: Kyle 
name= 
Select character: Stan 
name= 
Select character: 

看來,它無法檢測到輸入。 任何人都可以幫助我嗎?

回答

3

代碼很好;它的用法是錯誤的:允許的條目是1,2,34,而不是Kyle,CartmanStanQuit。 (如果用戶不得不輸入全名,那麼他們輸入的數字有什麼意義?)

空字符串會告訴您用戶輸入的內容無效。觀察,相比之下:

1) Kyle 
2) Cartman 
3) Stan 
4) Quit 
Select character: 1 
name=Kyle 
Select character: 3 
name=Stan 

順便說一句 - 它應該是:

# SAFE: quotes everything 
echo "name=$name" 

......或者......

# SAFE: Quotes only the expansion 
echo name="$name" 

...不是。 ...

# BUGGY: Runs expansion unquoted; can remove characters in IFS, expand globs, etc 
echo "name="$name 

請參閱Wooledge wiki上的When Should You Quote?,或養成通過http://shellcheck.net/運行代碼的習慣,這會找到這種性質的問題。

+0

謝謝你這麼快速和徹底的解釋。現在我得到它的工作。 –

+1

而不是謝謝,接受答案 – artm

+0

@KyleZeng,...解釋artM的含義 - 點擊解決問題的答案旁邊的複選框會將您的問題標記爲已解決。 –