我在 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 的值。