bash shell 脚本中参数位置旁边的连字符有什么作用?喜欢 ${1-}

bash shell 脚本中参数位置旁边的连字符有什么作用?喜欢 ${1-}

我遇到过这段代码这里:

#!/bin/bash

# ...

if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
    echo "Usage..."
    exit
fi

我知道它的作用是在传递任何参数(如-h, --help, -help, )时打印使用信息。-------help

但为什么"${1-}"而不仅仅是"${1}"?连字符有什么作用?

起初我认为这可能意味着从位置 1 开始的任何论证。我试过了,不,不是那样的。

然后我认为这可能是一个错字,作者的意思是"${1-9}"允许所有数字位置。再说一次,它不起作用,它甚至不是有效的代码。

答案1

参数扩展中的连字符允许指定默认值。 So 的${1-}意思是“第一个参数的值(如果已设置),否则为空字符串”。

这看起来并不是特别有用,因为未设置的变量无论如何都会扩展到空字符串。然而,如果启用并且没有给出参数,${1}则会导致错误,而不会 - 因此一些 shell 程序员在引用可能合法未设置的变量时总是使用这种形式。set -u${1-}

在您找到此内容的网站上下文中,这与第 5 号“事物”相符:

  1. 更喜欢使用set -o nounset.你可能有一个很好的借口不这样做,但是,我认为,最好总是设置它。

    • 当访问未设置的变量时,这将使脚本失败。避免因变量名称中的拼写错误而产生可怕的意外后果。
    • 当您想要访问可能已设置或尚未设置的变量时,使用"${VARNAME-}"代替"$VARNAME",就可以了。

相关内容