小编Ben*_*ylo的帖子

对BASH脚本中的-n选项进行测试始终返回true

我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到一个奇怪的(至少对我而言)[ -n arg ]测试行为.对于以下脚本:

#!/bin/bash

if [ -n $1 ]; then
    echo "The 1st argument is of NON ZERO length"
fi

if [ -z $1 ]; then
    echo "The 1st argument is of ZERO length"
fi
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

  1. 没有参数:

    xylodev@ubuntu:~$ ./my-bash-script.sh
    The 1st argument is of NON ZERO length
    The 1st argument is of ZERO length
    
    Run Code Online (Sandbox Code Playgroud)
  2. 带参数:

    xylodev@ubuntu:~$ ./my-bash-script.sh foobar
    The 1st argument is of NON ZERO length
    
    Run Code Online (Sandbox Code Playgroud)

我已经发现$1用双引号括起来给我的结果符合预期,但我仍然想知道为什么当没有使用引号并且没有参数调用脚本时,两个测试都返回true?它似乎$1是null然后,所以[ -n $1 ] …

bash shell sh

6
推荐指数
1
解决办法
704
查看次数

标签 统计

bash ×1

sh ×1

shell ×1