有没有办法更改 Bash 脚本中的命令行参数?例如,一个 Bash 脚本是这样调用的:
./foo arg1 arg2
有没有办法在脚本中更改 arg1 的值?像这样的东西:
$1="chintz"
你必须重置所有参数。改变例如
$3
:
$ set -- "${@:1:2}" "new_arg3" "${@:4}"
基本上你 set all arguments to their current values, except the one(s) that(s) that you want to change.
set --
也由 POSIX 7 指定.
"${@:1:2}"
符号 被扩展为从偏移量2
(即1
)开始的两个(因此符号中的$1
)位置参数。在这种情况下,它是 "$1" "$2"
的简写,但当您想要替换时它更有用,例如"${17}"
.
优化易读性和可维护性,您最好将
$1
和 $2
分配给更有意义的变量(我不知道,input_filename = $1
和 output_filename = $2
或其他东西)然后覆盖其中一个变量( input_filename = 'chintz'
),保持脚本的输入不变,以防其他地方需要它。
我知道这是一个旧的,但我发现 thkala 的答案非常有帮助,所以我使用了这个想法并稍微扩展它以使我能够为任何尚未定义的参数添加默认值 - 例如:
# set defaults for the passed arguments (if any) if not defined.
#
arg1=${1:-"default-for-arg-1"}
arg2=${2:-"default-for-arg-2"}
set -- "${arg1}" "${arg2}"
unset arg1 arg2
我希望这对其他人有用。