Bash

如何將數組傳遞給 bash shell 腳本?

  • April 23, 2016

如何將數組作為變數從第一個 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.' )

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