Bash中的字符串与默认值

本文最后更新于2017年10月28日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=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} 以在达到目的的同时避免错误
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3650.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注