【问题标题】:What does [ "$var" ] && $var do?[ "$var" ] && $var 是做什么的?
【发布时间】:2018-03-30 01:51:19
【问题描述】:

我正在浏览一个代码库,并在一个 shell 脚本中遇到了以下代码:

./some_script.sh 
errcode=$?

if [ "$errcode" != 0 ]; then
  [ "$SCRIPT_PATH" ] && $SCRIPT_PATH do_something
fi

SCRIPT_PATH 是一个扩展为脚本路径的环境变量(比如/usr/bin/abc.sh)。但是,我不明白 if 循环中的代码是做什么的。 [ "$SCRIPT_PATH" ] 是做什么的?有什么用还是这只是写错了?我唯一能想到的就是在运行之前检查文件是否存在应该是[ -f "$SCRIPT_PATH" ],但我不确定了。

知道这还能做什么吗?

【问题讨论】:

    标签: shell sh


    【解决方案1】:

    它在SCRIPT_PATH 中运行程序如果它不为空或未设置(因为这是[ one_arg ] 测试所做的。)

    【讨论】:

    • 请注意,这是一种非常幼稚的方法。最好使用[ -x "$SCRIPT_PATH" ] 来测试脚本是否存在并且是可执行的。
    • @PaulProgrammer 这是一条很有价值的建议。
    • $SCRIPT_PATH 最后使用的时候也要加上引号,不像原来的sn-p。
    【解决方案2】:

    它是以下内容的简写:

    if [ "$errcode" != 0 ]; then
      if [ "$SCRIPT_PATH" ]; then
         $SCRIPT_PATH do_something
      fi
    fi
    

    它通过在if 语句中滥用链接条件“短路”的方式来工作。

    这是否是个好主意……值得商榷。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多