Bash中是否有类似Python的简洁默认值赋值语法?
Bash里更简洁的默认值设置方案
当然有!Bash提供了专门的参数展开语法,能让你用一行代码搞定默认值赋值,比你现在的if判断简洁太多,完全能达到类似Python里myvar = myvar or "default"的效果。
针对位置参数的快捷写法
你例子里用的是命令行位置参数$1,这种场景最适合用${parameter:-word}语法:
myvar=${1:-default}
这句代码的逻辑是:如果$1为空(或者未被设置),就把default赋值给myvar;如果$1有有效值,就直接用$1的值。完美替代你原来的三行if判断。
另外还有个类似的${parameter-word},区别是它只会在parameter完全未设置的时候才用默认值——如果$1是空字符串(比如用户输入了空参数),它会保留空值而不是替换成默认。这个看你的具体需求选择。
普通变量的默认值设置
如果是针对普通变量(类似Python里的场景),同样用这套参数展开语法:
myvar=${myvar:-default}
这句和Python的myvar = myvar or "default"逻辑完全一致:只要myvar是空值(或者未定义),就替换成default,否则保持原变量的值。
举个对比例子
原来的写法:
myvar=$1 if [ -z "$myvar" ]; then myvar=default fi
替换成简洁版后,一行就搞定:
myvar=${1:-default}
甚至如果不需要赋值给变量,直接要输出默认值的话,还能直接这么用:
echo "当前值:${myvar:-default}"
内容的提问来源于stack exchange,提问作者JL Peyret
相关产品推荐
相关产品推荐

