有没有办法在Bash脚本中更改命令行参数。比如说,以下面的方式调用Bash脚本:
./foo arg1 arg2
有没有办法在脚本中更改arg1的值?说,像
$1="chintz"
答案 0 :(得分:121)
您必须重置所有参数。要改变,例如$3
:
$ set -- "${@:1:2}" "new" "${@:4}"
基本上你set 他们当前值的所有参数,除了你想要改变的那个。 set --
也被指定为by POSIX 7。
"${@:1:2}"
notation扩展为两个(因此符号中的2
)位置参数从偏移1
开始(即$1
)。在这种情况下,它是"$1" "$2"
的简写,但是当您想要替换时,它会更有用。 "${17}"
。
答案 1 :(得分:20)
优化易读性和可维护性,您可能最好将$1
和$2
分配给更有意义的变量(我不知道,input_filename = $1
和output_filename = $2
或其他什么)然后覆盖其中一个变量(input_filename = 'chintz'
),保持脚本输入不变,以防其他地方需要。
答案 2 :(得分:0)
我知道这是一个古老的方法,但是我发现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
我希望这对其他人有用。