Bash
如何將數組傳遞給 bash shell 腳本?
如何將數組作為變數從第一個 bash shell 腳本傳遞到第二個腳本。
first.sh
#!/bin/bash AR=('foo' 'bar' 'baz' 'bat') sh second.sh "$AR" # foo sh second.sh "${AR[@]}" # foo
second.sh
#!/bin/bash ARR=$1 echo ${ARR[@]}
在這兩種情況下,結果都是
foo
。但我想要的結果是foo bar baz bat
。我做錯了什麼,我該如何解決?
AFAIK,你不能。您必須對其進行序列化和反序列化,例如通過參數數組:
第一的
#!/bin/bash ar=('foo' 'bar' 'baz' 'bat') second "${ar[@]}" #this is equivalent to: second foo bar baz bat
第二
#!/bin/bash arr=( "$@" ) printf ' ->%s\n' "${arr[@]}" <<PRINTS -> foo -> bar -> baz -> bat PRINTS
一點建議:
export
為ed 變數保留所有大寫字母- 除非您有非常好的具體理由不這樣做,
"${someArray[@]}"
否則應始終使用雙引號;這個公式的行為完全像'array item 0' 'array item 1' 'aray item 2' 'etc.'
(假設someArray=( 'array item 0' 'aray item 1' 'aray item 2' 'etc.' )
)