如何在Bash中为位置参数赋值?我想为默认参数赋值:
if [ -z "$4" ]; then
4=$3
fi
表示4不是命令。
答案 0 :(得分:33)
set
内置是设置位置参数的唯一方法
$ set -- this is a test
$ echo $1
this
$ echo $4
test
--
可以防范看似选项的内容(例如-x
)。
在您的情况下,您可能需要:
if [ -z "$4" ]; then
set -- "$1" "$2" "$3" "$3"
fi
但它可能会更清楚
if [ -z "$4" ]; then
# default the fourth option if it is null
fourth="$3"
set -- "$1" "$2" "$3" "$fourth"
fi
您可能还想查看参数计数$#
,而不是测试-z
。
答案 1 :(得分:3)
您可以使用第四个参数再次调用脚本来执行您想要的操作:
if [ -z "$4" ]; then
$0 "$1" "$2" "$3" "$3"
exit $?
fi
echo $4
调用./script.sh one two three
之类的上述脚本将输出:
3
答案 2 :(得分:1)
这可以通过使用导出/导入类型机制直接分配到辅助数组中来完成:
set a b c "d e f" g h
thisArray=( "$@" )
thisArray[3]=4
set -- "${thisArray[@]}"
echo "$@"
输出'a b c 4 g h'