如果没有测试标志?

时间:2015-08-10 19:42:54

标签: bash if-statement logic

我不明白如何正确阅读。这是一个没有任何测试标志的IF语句,所以我不理解逻辑......帮助?

    #!/bin/bash
    get_user_input() {
      if [[ $1 ]]; then
        use_default=1
      else
        use_default=
      fi

我知道这是一个功能。我理解它要求第一个位置论证(1美元),但我不理解为什么它在IF声明中,如果他们没有测试任何东西。

我的任务是从供应商那里重写一个脚本,他们就有这样的东西。我认为他们可能只是为了工作保障而故意复杂的事情?

我很感激帮助!

2 个答案:

答案 0 :(得分:2)

来自man bash条件表达式

string
-n string
    True if the length of string is non-zero.

所以这与[[ -n $1 ]]相同(虽然对熟悉其他shell的人来说明显不太可读)。就个人而言,我建议您使用[[ -n $1 ]]明确表达所需的行为。

如果您对使脚本更具可移植性感兴趣,可以选择[ -n "$1" ]

答案 1 :(得分:0)

比使用if语句更好的是使用以下参数扩展:

use_default=${1:+1}

如果$1具有非空值,则use_default设置为1;否则,它会获得$1扩展产生的空值。