【问题标题】:What does this shell script do? [duplicate]这个 shell 脚本有什么作用? [复制]
【发布时间】:2017-02-06 21:19:49
【问题描述】:
FROM_PROJECT=false
if [[ -z $INV_NAME ]]; then
    if [[ -z $PRO_NAME ]]; then
            echo "error: variable not set" >&2
            exit 1
    elif [[ -z $INV_FILE ]]; then
            echo "error: variable INV not set" >&2
            exit 1
    fi
    FROM_PRO=true
elif [[ -n $PRO_NAME ]] || [[ -n $INV_FILE ]]; then
    echo "error: variable INV_NAME is not compatible with PRO_NAME and             INVENTORY_FILE" >&2
    exit 1

我不确定这些“-z”和“-n”在这里做什么?

【问题讨论】:

  • explainshell.com 会给你解释任何一行shell; [[ -z $INV_NAME ]] 或 [[ -n $PRO_NAME ]] 可以在那里使用。
  • 顺便说一句,使用 true 和 false 字符串作为条件是非常糟糕的做法。这样做的代码通常也会执行类似if $FROM_PROJECT; then ... 的操作,从而执行半任意代码执行(如果您的变量的内容可以被赋予任意值,则添加一些需要安全审查检查的内容)。相反,请使用空/非空状态来确定布尔值。
  • (也可以很容易地将0 和1 用作布尔值;如果some_value 持有一个正整数值,或者它本身持有的变量的名称,if (( some_value )) 将是真实的一个正整数值)。
  • @CharlesDuffy - 仅供参考,explainshell.com barfs on [[ -z $INV_NAME ]]“解析错误!意外令牌'-z'(位置 3)”

标签: shell scripting


【解决方案1】:

-z 用于测试字符串是否为空。

-n 正好相反。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多