运行if语句时出现太多参数错误

时间:2019-08-09 08:10:33

标签: bash shell

在该脚本中将变量$ 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语句

1 个答案:

答案 0 :(得分:2)

该问题归因于单词拆分。在$favSport中加上双引号可以解决此问题。

if [ "$favSport" == "football" ] || [ "$favSport" == "soccer" ] || [ "$favSport" == "Football" ] || [ "$favSport" == "Soccer" ]

如果您不输入" ",则$favSport将扩展为两个单词(如果您输入的是两个单词)。这就是为什么您得到too many arguments error的原因。 If期望有一个参数,但是您的变量被分为多个参数。添加引号不会拆分$favSport中的内容并解决了问题。

阅读this了解有关引用变量的更多信息。