我有一个bash脚本,它使用$1
来处理命令行参数。将默认值添加到bash脚本变量中
我想修改这个脚本,即使没有给出命令行参数也能工作;在这种情况下,我希望脚本使用默认值。
我不知道该怎么做;基本上我想我需要用我自己的变量替换$1
,并在程序的开始处有一行检查是否为$1
传递了一个值,并且如果不使用我将提供的默认值。但我不知道那个语法。谁能帮我?
我有一个bash脚本,它使用$1
来处理命令行参数。将默认值添加到bash脚本变量中
我想修改这个脚本,即使没有给出命令行参数也能工作;在这种情况下,我希望脚本使用默认值。
我不知道该怎么做;基本上我想我需要用我自己的变量替换$1
,并在程序的开始处有一行检查是否为$1
传递了一个值,并且如果不使用我将提供的默认值。但我不知道那个语法。谁能帮我?
var=${1:-default}
从给定的链接:
$ {参数:-word}
如果参数没有设置或者为空,文字的扩大取代。 否则,参数值将被替换。
看到一个例子:
$ echo "$v"
$ t=${v:-hello}
$ echo "$t"
hello
$ v=2
$ t=${v:-hello}
$ echo "$t"
2
而且还要注意${var:-value}
和${var-value}
是不一样的:What is the difference between ${var:-word} and ${var-word}?。
尝试:
echo "${1:-"my default"}"
在您的脚本(例如foo.sh
)看:-
修改器的效果。
请注意,如果你在传递一个空字符串到你的脚本,也默认踢腿:
$ ./foo.sh ""
my default
所以你不能从一个不给定参数,这样区分空字符串。
如果你需要有一个区别,你应该依靠$#
告诉你的参数个数:
if [ $# = 0 ]
then
echo "my default"
else
echo "$1"
fi
=>
$ printf "[%s]\n" "$(./foo.sh "")"
[]
有趣的方法,做得好! – fedorqui
实际上,我并不知道'$ {a-b}',但会认为它优于使用'$#'。 – Alfe
@cdarke所以'[$#-eq 0]' – 123