web-dev-qa-db-fra.com

Shell Script: façon correcte de déclarer un tableau vide

J'essaie de déclarer un tableau vide dans Shell Script, mais je rencontre une erreur.

#!/bin/bash

list=$@

newlist=()

for l in $list; do

        newlist+=($l)

done

echo "new"
echo $newlist

Quand je l'exécute, j'obtiens test.sh: 5: test.sh: Syntax error: "(" unexpected

22
luizfzs

Exécutez-le avec bash:

bash test.sh

Et voyant l'erreur, il semble que vous l'exécutiez avec dash:

> dash test.sh
test.sh: 5: test.sh: Syntax error: "(" unexpected

Seulement cette fois, vous avez probablement utilisé le lien (/ bin/sh ->/bin/dash).

10
konsolebox

Je trouve la syntaxe suivante plus lisible.

declare -a <name of array>

Pour plus de détails, voir Bash Guide for Beginners: 10.2. Variables de tableau .

7
shaffooo

Essayez ceci pour voir si vous êtes orienté vers le tiret ou le bash

ls -al /bin/sh

Si elle indique /bin/sh -> /bin/dash, tapez ceci:

Sudo rm /bin/sh
Sudo ln -s /bin/bash /bin/sh

Puis tapez à nouveau:

ls -al /bin/sh*

alors doit dire quelque chose comme ça: 

/bin/sh -> /bin/bash

Cela signifie que maintenant sh est correctement orienté vers Bash et que vos tableaux fonctionneront.

1
Usul Muhadiv

Dans BASH 4+, vous pouvez utiliser les éléments suivants pour déclarer un tableau vide:

declare -a ARRAY_NAME=()

Vous pouvez ensuite ajouter de nouveaux éléments en:

ARRAY_NAME+=NEW_ITEM
0
TMT