web-dev-qa-db-fra.com

`Erreur de syntaxe:" ("inattendu` lors de la création d'un tableau

J'ai deux serveurs Linux (Debian). Je crée un script Shell.

Sur le premier je crée ainsi un tableau:

#!/bin/bash
target_array=(
    "/home/user/direct/filename -p123 -r"
)

Ça marche bien. Mais quand je lance cela sur l'autre serveur, j'obtiens:

Syntax error: "(" unexpected

Autant que je sache, les deux serveurs sont les mêmes. Quelqu'un peut-il nous expliquer pourquoi cela ne fonctionne pas?

Si je le tape directement dans le terminal, ça va?


Il semblerait que lorsque je l'exécute en tant que

sh scriptname.sh

Je reçois l'erreur, mais si je l'exécute en tant que

./scriptname.sh

ça semble aller. Quelle est la différence?

38
IGGt

Lorsque vous utilisez ./scriptname.sh il s'exécute avec /bin/bash comme dans la première ligne avec #!. Mais lorsque vous utilisez sh scriptname.sh il exécute sh, pas bash.

Le shell sh n'a pas de syntaxe pour créer des tableaux, mais Bash a la syntaxe que vous avez utilisée.

59
Konstantin Morenko

Fonctionnement ./scriptname.sh entraînera la lecture de la première ligne du fichier et verra qu'il doit exécuter ´/bin/bash´ et passer le reste du script à l'interpréteur, tout en exécutant sh scriptname.sh transmettra le fichier au shell standard de l'utilisateur (par exemple Ash) et il se peut que cet autre interprète ne prenne pas en charge les tableaux comme le fait Bash.

0
dave_alcarin

Avec sh scriptname.sh, Vous l'exécutez avec sh, pas nécessairement avec bash. Essayez de comparer sh --version Sur les deux machines. Et/ou avec dpkg -S $(which sh).

0
joepd