arrays echo指令 將命令行參數轉換為Bash中的數組



linux if (4)

如何將命令行參數轉換為bash腳本數組?

我想要這樣做:

./something.sh arg1 arg2 arg3

並將其轉換為

myArray=( arg1 arg2 arg3 )

以便我可以使用myArray在腳本中進一步使用。

這個以前的SO帖子接近了,但沒有涉及如何創建一個數組: 如何解析Bash中的命令行參數?

我需要將參數轉換為常規的bash腳本數組; 我意識到我可以使用其他語言(例如Python),但需要在bash中執行此操作。 我想我正在尋找一個“追加”功能或類似的東西?

更新:我也想問如何檢查零參數並分配一個默認的數組值,並感謝下面的答案,能夠得到這個工作:

if [ "$#" -eq 0 ]; then
  myArray=( defaultarg1 defaultarg2 )
else
  myArray=( "[email protected]" )
fi

https://ffff65535.com


也許這可以幫助:

myArray=("[email protected]") 

你也可以通過省略'in'來遍歷參數:

for arg; do
   echo "$arg"
done

將是等同的

for arg in "${myArray[@]}"; do
   echo "$arg"
done

其實你的命令行參數實際上已經像一個數組了。 至少,你可以像處理數組一樣處理[email protected]變量。 這就是說,你可以將它轉換成一個像這樣的實際數組:

myArray=( "[email protected]" )

如果您只想鍵入一些參數並將它們輸入到[email protected]值中,請使用set

$ set -- apple banana "kiwi fruit"
$ echo "$#"
3
$ echo "[email protected]"
apple banana kiwi fruit

了解如何使用參數結構在POSIX sh中特別有用,它沒有任何其他類似數組。


更簡單但是,您可以直接在[email protected]上操作;)

以下是如何從提示中直接傳遞參數列表:

function echoarg { for stuff in "[email protected]" ; do echo $stuff ; done ; } 
    echoarg Hey Ho Lets Go
    Hey
    Ho
    Lets
    Go

這是另一種用法:

#!/bin/bash
array=( "[email protected]" )
arraylength=${#array[@]}
for (( i=1; i<${arraylength}+1; i++ ));
do
   echo "${array[$i-1]}"
done




shell