2016-09-05 6 views
1

配列変数を使用して文字列を連結しようとしましたが、エラーが発生しました。シェルスクリプト内で配列変数を使用して変数を初期化する

declare -a arr 
arr=(one two three) 
var= "${arr[0]} ${arr[1]}" 
echo $var 

期待出力

one two 

(1と2の間に4つのスペース)

私は次のようなエラーになっています: -

[[email protected] IBM]$ ./test.sh 
./test.sh: line 10: one  two: command not found 

これは我々が割り当てることができませんどういう意味を配列要素を持つ変数(変数として使用)?

var="${arr[0]} ${arr[1]}" 

bashは、コマンドを呼び出すときに、一時的に変数を設定することを可能にする構文をサポートしています。 はあなたが=の後にスペースを削除する必要があり、この

答えて

2

を行うための他の方法は何ですか。構文は、VARNAME=somevalue commandのように機能します。これにより、(環境)変数VARNAMEsomevalueに設定したコマンドが実行されます。 VARNAME= commandと言う場合、bashはそれをVARNAME="" commandと解釈します。つまり、変数を空の文字列に設定します。あなたのケースでは、bashはコマンドのように"${arr[0]} ${arr[1]}"の部分を実行しようとします。

1

割り当てに余分なスペースがあります。あなたはそのときがあり、

echo "$var" 

それにあなたが表示されるエラーメッセージの理由を空白を保持するために、エコーの引数をも引用する必要があります

var="${arr[0]} ${arr[1]}" 

var= "${arr[0]} ${arr[1]}" 
# ^

を交換してくださいは等号の後のスペースで、bashはコマンドを空の環境変数varに割り当てて解釈し、コマンドを実行しようとしますはone twoと評価され、コマンドが見つかりませんでした。

関連する問題