Bash

Bash:位置參數的切片

  • August 17, 2021

我怎樣才能$@在 Bash 中獲得一個切片,而無需首先將所有位置參數複製到另一個這樣的數組?

argv=( "$@" )
echo "${argv[@]:2}";

您可以使用與任何其他數組相同的格式。要從中提取第二個和第三個元素$@,您可以:

echo "${@:1:2}"
         - -
         | |----> slice length
         |------> slice starting index 

bash 中的更多數組切片範例

代替some_array_variable在您的程式碼中使用(argv在您的情況下),只需@在該變數名的位置使用。該符號@表示輸入參數數組,您可以像對待任何其他數組一樣對待它。混淆只是因為我們習慣於看到它幾乎總是與這樣的$字元配對:$@,所以我們沒有意識到@字元是數組本身,也可以單獨用作數組變數。

所以,這裡有一些例子:

從輸入參數數組 切片,@通常可以簡單地查看和訪問$@

# array slicing basic format 1: grab a certain length starting at a certain
# index
echo "${@:2:5}"
#         │ │
#         │ └────> slice length
#         └──────> slice starting index 

# array slicing basic format 2: grab all remaining array elements starting at a
# certain index through to the end
echo "${@:2}"
#         │
#         │
#         └──────> slice starting index 

更多數組提醒自己:

以下是對我自己的一般數組提醒,可能也有利於其他登陸此頁面的人。

# store a slice from an array into a new array
new_array=("${@:4}")

# print the entire array
echo "new_array = ${new_array[@]}"

這是 bash 中通用數組切片和數組元素訪問的可執行範例,受此來源的啟發:

(根據您的案例,@如果需要,可以用作輸入參數數組,而不是下面)a

a=(one two three four five six)   # define a new array, `a`, with 6 elements
echo "$a"           # print first element of array a
echo "${a}"         # print first element of array a
echo "${a[0]}"      # print first element of array a
echo "${a[1]}"      # print *second* element of array a
echo "${#a[@]}"     # print number of elements in array a
echo "${a[@]:1:3}"  # print 2nd through 4th elements; ie: the 3 elements
                   # starting at index 1, inclusive, so: indices 1, 2, and 3
                   # (output: `two three four`)
echo "${a[@]:1}"    # print 2nd element onward

全部執行

將上面的所有程式碼塊複製並粘貼到一個名為 的文件array_slicing_demo.sh中,並將其標記為執行檔,chmod +x array_slicing_demo.sh以便您可以執行它。或者,只需在此處從我的eRCaGuy_hello_worl d儲存庫下載我的展示array_slicing_demo.sh文件。

然後,像這樣執行它:

./array_slicing_demo.sh a b c d e f g h i j k

…您將看到以下輸出:

b c d e f
b c d e f g h i j k
new_array = d e f g h i j k
one
one
one
two
6
two three four
two three four five six

參考

  1. Bash:位置參數的切片
  2. bash變數賦值中的單括號

關鍵字:bash 中的數組訪問;bash 數組索引;在 bash 中訪問數組中的元素;bash 數組切片;在 bash 中列印數組;在 bash 中列印數組元素

引用自:https://unix.stackexchange.com/questions/82060