=Start=
缘由:
挺有用的一个知识点,虽然也有替代的方法(只是没那么优雅),但是多总结一下,往最佳实践方向靠也是极好的。
正文:
参考解答:
- 总结:使用 `${var:-default_value}` 的方式!
#!/bin/bash # set -x export PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin/:/usr/local/sbin wp_version=$(ls -lt | grep 'this is not a valid search condition') echo "\$wp_version = $wp_version" echo "\${wp_version:-unknown} = ${wp_version:-unknown}" # echo "\${wp_version:?unknown} = ${wp_version:?unknown}" # [报错退出]line 8: wp_version: unknown echo function test_arg() #如果没有给函数传参,则 $1 应该就是未定义的 { echo "$#" local arg1="$1" echo "\$arg1 = $arg1" local arg1_default="${1:-unknown}" echo "\$arg1_default = $arg1_default" echo "\${1:-unknown} = ${1:-unknown}" # local arg1_default2="${1:?unknown}" # line 21: 1: unknown # echo "\$arg1_default2 = $arg1_default2" # echo "\${1:?unknown} = ${1:?unknown}" } test_arg aabbcc test_arg function test_arg2() #如果没有给函数传参,则 $1 就是未定义的 { echo "$#" if [ $# -gt 0 ]; then arg1="$1" else arg1="x" #这里只要给 arg1 一个默认'非空'值,则后面的 line42 就不会报错 fi echo "\$arg1 = $arg1" local arg1_default="${arg1:-unknown}" echo "\$arg1_default = $arg1_default" echo "\${arg1:-unknown} = ${arg1:-unknown}" local arg1_default2="${arg1:?unknown}" # line 42: arg1: unknown echo "\$arg1_default2 = $arg1_default2" echo "\${arg1:?unknown} = ${arg1:?unknown}" } echo test_arg2 aabbcc test_arg2 # 结论:使用 ${var:-default_value} 以在达到目的的同时避免错误
参考链接:
- linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法
- linux shell 字符串操作(长度,查找,替换)详解
- shell中给变量设置默认值
- Linux Shell之三 高级变量及字符串
- Shell编程学习笔记:变量篇(二)
- Bash 参数和参数扩展
=END=
《“Bash中的字符串与默认值”》 有 1 条评论
一篇教会你写90%的shell脚本
https://zhuanlan.zhihu.com/p/264346586