首页 > 解决方案 > shell脚本中的命令在线参数

问题描述

嗨,我编写了小 shell 脚本,我无法理解该脚本的行为。任何人都可以帮助我理解该脚本。

脚本:

#!/bin/bash

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

在执行脚本时。

./test.sh one

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

谁能解释我这种行为来理解

标签: bashshellsh

解决方案


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所指出的,使用它可能会更好,[[而不是[. 除其他外,这消除了引用的需要。在此处查看更多差异。

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

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


推荐阅读