传递给文件的参数读为0

时间:2019-01-05 18:57:28

标签: linux bash arguments

我有一个脚本:

#!/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的可能性?

这是怎么了?

1 个答案:

答案 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}