Sri*_*ram 81 bash command-line-arguments
有没有办法在Bash脚本中更改命令行参数.比如说,以下面的方式调用Bash脚本:
./foo arg1 arg2
Run Code Online (Sandbox Code Playgroud)
有没有办法在脚本中更改arg1的值?说,像
$1="chintz"
Run Code Online (Sandbox Code Playgroud)
thk*_*ala 129
你必须重置所有参数.改变例如$3:
$ set -- "${@:1:2}" "new" "${@:4}"
Run Code Online (Sandbox Code Playgroud)
基本上,您将 所有参数设置为其当前值,但您要更改的参数除外.set --也由POSIX 7指定.
所述"${@:1:2}"符号被扩展为两个(因此2在符号)从起始位置参数偏移1(即$1)."$1" "$2"在这种情况下,它是一种速记,但是当你想要替换例如它时它会更有用"${17}".
Joh*_*web 21
优化可读性和可维护性,你可能会更好分配$1和$2更有意义的变量(我不知道,input_filename = $1和output_filename = $2什么的),然后重写这些变量(input_filename = 'chintz'),使输入到脚本不变的情况下,它是在别处需要.
小智 9
我发现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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43733 次 |
| 最近记录: |