這個 ${@:2} 在 shell 腳本中意味著什麼

這個 ${@:2} 在 shell 腳本中意味著什麼

我在 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的.bashzsh

ksh和中bash,您可以使用以下${array[@]:first:length}語法存取數組的多個元素,該語法最多擴展到length(或length省略所有)數組元素array(在按索引數字排序的數組元素列表中),從第一個索引大於或等於 的first。當在標量上下文中時(就像這裡對標量變數的賦值一樣),元素列表用空格字元與bashandksh93和 的第一個字元$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和相反bashzsh數組是與標量變數不同的變數類型,不是稀疏的(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和 的可移植性bashzsh也接受 的0第一個元素$@並將其視為$0

因此,您可以在所有 3 個 shell 中使用${a[@]:x:n}and${@:x:n}可移植,但僅限於非稀疏數組,並注意 IFS 的值。

相關內容