2017-08-04 6 views
1

this questionで説明されているように、配列をシェルスクリプトに渡すことを試しています。私はそうのように、私のスクリプトを実行していると一直線に配列変数を宣言しbashでコマンドを実行する前に配列を割り当てることはできますか?

#!/bin/bash 
echo "$1" 
echo "${!1}" 
arrayVar=("${!1}") 
echo "${arrayVar[1]}" 

array=(foo bar test) ./test.sh array[@] 
私は単純に配列の名前に取ると、アレイをプリントアウトするように設計された小さなスクリプトを書きました

出力:

|array[@]   # the bars are only here to force the final blank line 
|(foo bar test) 
| 

arrayが、代わりに実際には配列であることの、単純に文字列(foo bar test)

0123であると思われます

位置パラメータを介して間接的にではなく、arrayを直接名前にエコーするスクリプトを変更しても、同じ結果が得られます。

#!/bin/bash 
echo "$1" 
arrayVar=("${!1}") 
echo $arrayVar 
echo "${arrayVar[1]}" 

echo $array 
echo "${array[1]}" 

出力:

|array[@]   # the bars are only here to force the final blank line 
|(foo bar test) 
| 
|(foo bar test) 
| 

私は単に何か間違ったことをやっている、またはbashのコマンドの前に、配列の割り当てをサポートしていませんか?

答えて

2

現在、bashは配列のエクスポートをサポートしていません。これは、man bashに記載されています。

配列変数はまだエクスポートされていない可能性があります。

2

これはサポートされていないようです。

array=(foo bar test) ./test.shは(arrayが、その後、文字列リテラル'(foo bar test)'としてエクスポートされることをしない場合は

array=(foo bar test); export array; ./test.sh 

必要があり、実際に、エクスポートした後、bashのレポートエクスポートのアレイとして配列(エクスポートx手段) :

$ declare -p array 
declare -ax array='([0]="foo" [1]="bar" [2]="test")' 

が、これは嘘であることが判明:

$ env | grep array; echo status=$? 
    status=1 
関連する問題