在Shell脚本中命令在线参数

时间:2018-07-30 16:31:10

标签: bash shell sh

您好,我编写了小型Shell脚本,但我无法理解该脚本的行为。谁能帮助我理解该脚本。

脚本:

#!/bin/bash

if [ -z $1 ]
then
   echo "fail"
else
  echo "success"
fi

执行脚本时。

./test.sh one

即使它传递了参数,它也会输出else语句而不是main语句。

任何人都可以向我解释这种行为以了解

1 个答案:

答案 0 :(得分:4)

bash中的-z测试正在检查字符串是否为空(零长度)值。

由于您要将参数传递给脚本$1并不为空,因此-z $1的计算结果为false,执行脚本的else部分。

旁注:由于您使用的是字符串,因此我建议您对变量引用如下:

if [ -z "$1" ]; then
    echo "String is empty / No argument given"
else
    echo "String is not empty / Argument given"
fi

编辑: 正如user1934428所指出的,最好使用[[代替[。除其他外,这消除了报价的需要。查看更多差异here

if [[ -z $1 ]]; then
    ...

但是,请注意,这是bash扩展名,在sh脚本中不起作用。