如何在Bash中更改命令行参数?

时间:2011-01-28 11:27:16

标签: bash command-line-arguments

有没有办法在Bash脚本中更改命令行参数。比如说,以下面的方式调用Bash脚本:

./foo arg1 arg2  

有没有办法在脚本中更改arg1的值?说,像

$1="chintz"

3 个答案:

答案 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 = $1output_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

我希望这对其他人有用。