我有一个脚本:
#!/bin/bash
echo "You chose $1 and $2 "
if [[ $1 -eq 0 || $2 -eq 0 ]]
then
echo "You didn't chose argument"
exit 1
elif
...
exit 0
在终端中,我尝试了:
./Path/to/script argument1 argument2
结果我得到:
You chose argument1 and argument2
You didn't chose argument
我有可能同时返回两个正确的参数并将它们视为0的可能性?
这是怎么了?
答案 0 :(得分:2)
-eq
用于整数比较,当您尝试将字符串与整数进行比较时,[[
会变得有些滑稽。发生的情况是,bash
将$1
扩展为另一个变量的名称,并扩展了那个。如果该变量不存在,则默认情况下会扩展为0。
如果要检查字符串本身是否为零,请坚持使用字符串比较:
if [[ $1 = 0 || $2 = 0 ]]; then
如果您似乎更希望检查是否实际提供了两个参数,请按照mickp的建议检查$#
的值:
if (( $# < 2 )); then
echo "You didn't provide 2 arguments.
另一种选择是使用${...?....}
形式的参数扩展,它会打印给定的错误消息,如果未设置参数则退出。
: ${1?You need two arguments, provided none}
: ${2?You need two arguments, provided only $1}