我有一个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 次 |
最近记录: |