2016-08-20 62 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的含义 - 点击解决问题的答案旁边的复选框会将您的问题标记为已解决。 –