シェルスクリプトで空の配列を宣言しようとしていますが、エラーが発生しています。
#!/bin/bash
list=$@
newlist=()
for l in $list; do
newlist+=($l)
done
echo "new"
echo $newlist
実行すると、test.sh: 5: test.sh: Syntax error: "(" unexpected
Bashで実行します:
bash test.sh
エラーを見ると、実際にダッシュで実行しているようです:
> dash test.sh
test.sh: 5: test.sh: Syntax error: "(" unexpected
今回のみ、おそらくリンク(/ bin/sh->/bin/dash)を使用しました。
BASH 4以降では、空の配列を宣言するために次を使用できます。
declare -a ARRAY_NAME=()
その後、次の方法で新しいアイテムNEW_ITEM1およびNEW_ITEM2を追加できます。
ARRAY_NAME+=(NEW_ITEM1)
ARRAY_NAME+=(NEW_ITEM2)
新しいアイテムを追加するときは括弧()が必要であることに注意してください。これは、新しいアイテムが配列要素として追加されるために必要です。 ()を忘れた場合、NEW_ITEM2は最初の配列要素ARRAY_NAME [0]に追加される文字列になります。
上記の例は次のようになります。
echo ${ARRAY_NAME[@]}
NEW_ITEM1 NEW_ITEM2
echo ${ARRAY_NAME[0]}
NEW_ITEM1
echo ${ARRAY_NAME[1]}
NEW_ITEM2
次に、実行した場合(括弧がないことに注意してください):
ARRAY_NAME+=NEW_ITEM3
これは次のようになります。
echo ${ARRAY_NAME[@]}
NEW_ITEM1NEW_ITEM3 NEW_ITEM2
echo ${ARRAY_NAME[0]}
NEW_ITEM1NEW_ITEM3
echo ${ARRAY_NAME[1]}
NEW_ITEM2
追加操作で私を修正してくれた@LenWに感謝します。
これを試して、ダッシュまたはバッシュに向いているかどうかを確認してください
ls -al /bin/sh
/bin/sh -> /bin/dash
、次にこれを入力します。
Sudo rm /bin/sh
Sudo ln -s /bin/bash /bin/sh
次に、もう一度入力します。
ls -al /bin/sh*
このようなことを言う必要があります:
/bin/sh -> /bin/bash
これは、sh
が適切にBashに向けられ、配列が機能することを意味します。