xtr*_*ing 9 shell bash shell-script arguments
我从这里遇到了这段代码:
#!/bin/bash
# ...
if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
echo "Usage..."
exit
fi
Run Code Online (Sandbox Code Playgroud)
我知道它的作用是在传递任何参数(如-h, --help, -help, )时打印使用信息。-------help
"${1-}"而不仅仅是"${1}"?连字符有什么作用?起初我认为这可能意味着从位置 1 开始的任何论证。我试过了,不,不是那样的。
然后我认为这可能是一个错字,作者的意思"${1-9}"是允许所有数字位置。再说一次,它不起作用,它甚至不是有效的代码。
Ste*_*itt 22
参数扩展中的连字符允许指定默认值。因此${1-}表示 \xe2\x80\x9c 第一个参数的值(如果已设置),否则表示空字符串 \xe2\x80\x9d。
这看起来并不特别有用,因为未设置的变量无论如何都会扩展到空字符串。然而,如果启用并且没有给出参数,${1}将会导致错误,而won\xe2\x80\x99t \xe2\x80\x94 因此一些 shell 程序员在引用可能合法未设置的变量时总是使用这种形式。set -u${1-}
在您找到此内容的网站的上下文中,这与 \xe2\x80\x9cthing\xe2\x80\x9d 数字 5 相符:
\n\n\n\n
\n- \n
更喜欢使用
\nset -o nounset. 您可能有很好的借口不这样做,但是,我认为,\xe2\x80\x99 最好始终设置它。\n
\n- 当访问未设置的变量时,这将使脚本失败。避免因变量名称中的拼写错误而产生可怕的意外后果。
\n- 当您想要访问可能已设置或未设置的变量时,请使用,
\n"${VARNAME-}"而不是"$VARNAME", 那么\xe2\x80\x99 就很好了。