在该脚本中将变量$ favSport传递到if语句时,除非变量包含2个单词,否则它将起作用
嗨,我儿子正在自学编程(我是技术人员,但不是程序员)。他正在使用bash脚本来学习变量和循环的概念。如果此代码/问题本质上很简单,他将是6岁。
他做得还不错,并为自己感到骄傲,但是作为大姐姐的大姐姐设法打破了他的新玩具,发现他的程序中有一个错误,他无法弄清楚。当脚本运行并且如果变量为2个单词时,用户将转到最喜欢的运动部分
read -p "So $name what is your favourite sport? " favSport
if [ $favSport == football ] || [ $favSport == soccer ] || [ $favSport == Football ] || [ $favSport == Soccer ]
then
echo
echo I like $favSport too!!
else
echo
echo Oh I do not like $favSport. My favourite sport is football.
fi
error line 31: [: too many arguments
出现,但此后程序继续。第31行是if语句
答案 0 :(得分:2)
该问题归因于单词拆分。在$favSport
中加上双引号可以解决此问题。
if [ "$favSport" == "football" ] || [ "$favSport" == "soccer" ] || [ "$favSport" == "Football" ] || [ "$favSport" == "Soccer" ]
如果您不输入" "
,则$favSport
将扩展为两个单词(如果您输入的是两个单词)。这就是为什么您得到too many arguments error
的原因。 If
期望有一个参数,但是您的变量被分为多个参数。添加引号不会拆分$favSport
中的内容并解决了问题。
阅读this了解有关引用变量的更多信息。