IQA*_*eas 8 bash shell if-statement operators
可能重复:
Bash中的三元运算符(?:)
如果这是AS3或Java,我会做以下事情:
fileName = dirName + "/" + (useDefault ? defaultName : customName) + ".txt";
Run Code Online (Sandbox Code Playgroud)
但是在shell中,这似乎是不必要的复杂,需要几行代码,以及相当多的重复代码.
if [ $useDefault ]; then
fileName="$dirName/$defaultName.txt"
else
fileName="$dirName/$customName.txt"
fi
Run Code Online (Sandbox Code Playgroud)
你可以将这一切压缩成一行,但这极大地牺牲了清晰度.
有没有更好的方法if在shell 中编写带有变量赋值的内联?
Wil*_*ell 16
写吧:
fileName=${customName:-$defaultName}.txt
Run Code Online (Sandbox Code Playgroud)
它与你所拥有的并不完全相同,因为它没有检查useDefault.相反,它只是检查是否customName已设置.useDefault您可以直接取消设置,而不是设置何时使用默认值customName.
?:shell中没有条件运算符,但是你可以使代码更加冗余,如下所示:
if [ $useDefault ]; then
tmpname="$defaultName"
else
tmpname="$customName"
fi
fileName="$dirName/$tmpname.txt"
Run Code Online (Sandbox Code Playgroud)
或者您可以编写自己的shell函数,其作用类似于?:运算符:
cond() {
if [ "$1" ] ; then
echo "$2"
else
echo "$3"
fi
}
fileName="$dirname/$(cond "$useDefault" "$defaultName" "$customName").txt"
Run Code Online (Sandbox Code Playgroud)
虽然这可能是矫枉过正(并且它会评估所有三个参数).
感谢Gordon Davisson在评论中指出引用内嵌$(...).