很明显,使用 shell 脚本可以通过多种方式完成这类事情(比大多数编程语言都多),因为有各种不同的变量扩展方法和程序,例如test
and [
and [[
, etc.
现在我只是在寻找
DIR=$1 or .
这意味着,我的 DIR 变量应该包含第一个参数中指定的内容或当前目录。
这和有什么区别DIR=${1-.}
?
我发现连字符语法令人困惑,并寻求更易读的语法。
为什么我不能这样做?
DIR="$1" || '.'
我猜这意味着“如果 $1 为空,则分配仍然有效(DIR 变为空),因此无效命令 '.'永远不会被处决。”
我在这里看到几个问题。
-
“我可以写一些真正反映这种逻辑的东西吗”
是的。有几种方法可以做到这一点。这是一个:
if [[ "$1" != "" ]]; then
DIR="$1"
else
DIR=.
fi
-
“这和有什么区别DIR=${1-.}
?”
语法${1-.}
扩展到.
if $1
未设置,但扩展如下$1
if $1
被设置——即使$1
设置为空字符串。
语法${1:-.}
扩展到.
if $1
未设置或设置为空字符串。它扩展如下$1
除非$1
设置为空字符串以外的其他值。
-
“为什么我不能这样做?DIR="$1" || '.'
”
因为这是 bash,而不是 perl 或 ruby 或其他语言。 (请原谅我的冷嘲热讽。)
在巴什中,||
分隔整个命令(从技术上讲,它分隔管道)。它不分隔表达式。
So DIR="$1" || '.'
意思是“执行DIR="$1"
,如果以非零退出代码退出,则执行'.'
”.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)