【发布时间】:2011-06-17 04:40:27
【问题描述】:
有没有办法改变 Bash 脚本中的命令行参数?例如,像这样调用 Bash 脚本:
./foo arg1 arg2
有没有办法在脚本中更改 arg1 的值?比如:
$1="chintz"
【问题讨论】:
标签: bash command-line-arguments
有没有办法改变 Bash 脚本中的命令行参数?例如,像这样调用 Bash 脚本:
./foo arg1 arg2
有没有办法在脚本中更改 arg1 的值?比如:
$1="chintz"
【问题讨论】:
标签: bash command-line-arguments
您必须重置所有参数。改变例如$3:
$ set -- "${@:1:2}" "new" "${@:4}"
基本上你set 所有 参数到它们的当前值,除了你想改变的那些。 set -- 也被指定为 by POSIX 7。
"${@:1:2}" notation 扩展为从偏移量1(即$1)开始的两个位置参数(因此符号中的2)。在这种情况下,它是 "$1" "$2" 的简写,但当您想要替换时它会更有用,例如"${17}".
【讨论】:
eval 放在每this 的行首。
优化易读性和可维护性,您最好将$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
我希望这对其他人有用。
【讨论】: