=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