我在 shell 脚本中看到了这一点。
variable=${@:2}
它在做什么?
答案1
它显示了 Bash 中特殊变量 的内容$@
。它包含所有命令行参数,并且该命令从第二个命令获取所有参数并将它们存储在变量 中variable
。
例子
这是一个示例脚本。
#!/bin/bash
echo ${@:2}
variable=${@:3}
echo $variable
运行示例:
./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5
参考
答案2
最新版本ksh
的.bash
zsh
在ksh
和中bash
,您可以使用以下${array[@]:first:length}
语法访问数组的多个元素,该语法最多扩展到length
(或length
省略所有)数组元素array
(在按索引数字排序的数组元素列表中),从第一个索引大于或等于 的first
。当在标量上下文中时(就像这里对标量变量的赋值一样),元素列表用空格字符与bash
andksh93
和 的第一个字符$IFS
(如果$IFS
为空则什么也不用,如果未设置则为空格)用zsh
.
例如:
$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>
$@
是一个特例。$@
是位置参数数组 ( $1
, $2
...)。但与 一起使用时:
,$0
也包含在内。所以${@:1}
与 相同$@
,${@:0}
与其他数组不同。
中zsh
,略有不同。最近才zsh
添加ksh
语法以实现兼容性,但具有自己的用于选择元素范围的语法。
与ksh
和相反bash
,zsh
数组是与标量变量不同的变量类型,不是稀疏的(zsh
具有关联数组作为另一种变量类型)并且从索引 1 而不是 0 开始。
对于,您可以使用(其中也可以为负数从末尾向后计数)zsh
访问数组元素范围。$a[first,last]
last
在zsh
,
a[23]=a a[5]=b a[235]=c a[45]=d
创建一个包含 235 个元素的数组,其中大部分为空。$a[12,50]
将扩展到元素 12 到 50,并且${a[@]:12:2}
只会扩展到 (空)$a[12]
和$a[13]
元素。作为一种特殊情况,并且再次考虑到ksh93
和 的可移植性bash
,zsh
还接受 的0
第一个元素$@
并将其视为$0
。
因此,您可以在所有 3 个 shell 中使用${a[@]:x:n}
and${@:x:n}
可移植,但仅限于非稀疏数组,并注意 IFS 的值。