我有一个shell脚本,其中的一行是“ set-$ {@:2}”,请您告诉我这是什么意思?我已经在测试脚本中尝试过,它似乎删除了args中的$ 1参数,您能否为我提供更多详细信息?
Joh*_*ica 10
这是一种复杂的书写方式shift。*
首先,是什么set --?
set有很多用途。它可以更改shell选项,例如,set -e用于启用严格的错误检查或set -x打印正在运行的每个命令。set也可以改变$1,$2等等,命令行参数。set foo bar baz套$1到"foo",$2到"bar"和$3到"baz"。--是一个常见的成语,意思是“停止寻找标志”。如果你写set -e那么你得到的错误检查,但set -- -e该-e不再是一个标志,它现在的价值$1。好吧,那又如何"${@:2}"呢?
"$@"是命令行参数的列表。写作"$@"就像"$1" "$2" "$3" ...为许多论点写作一样。:2是数组切片符号。它为您提供了从第二个元素开始的数组元素。"${@:2}为您提供从第二个开始的所有命令行参数。就像写作"$2" "$3" "$4" ...。$var是的简写${var}。对于简单的扩展,花括号是可选的,对于更复杂的花括号是必需的。要使用数组切片,"$@"必须写为"${@}"。"$@:2"不起作用:shell将其解析为"${@}:2"。把它们放在一起,你会得到“设定的命令行参数$2,$3,$4,等等。” 或者,正如您所说,它摆脱了$1。
到底是什么shift。
*实际上,shift等效于set -- "${@:2}"双引号。如果任何参数包含空格或通配符(,等等)*,双引号都将丢失?。如有疑问,请始终引用变量扩展!
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |