declare: not found, bash, dash et sh !

Utilisant la fonction "declare" en bash pour utiliser des tableaux. Je me suis heurté à un problème en lançant le script.

Le lançant de façon générale avec un "sh monscript.sh", j'ai obtenu un message d'erreur :

test.sh: 3: test.sh: declare: not found
test.sh: 4: test.sh: mon_tableau[2]=test: not found
test.sh: 5: test.sh: Bad substitution

En fait, ce message vient du fait que depuis plusieurs versions de bash, sh (qui est un lien) pointe vers dash et non bash!

Avec la version 4.1.3 de bash, sh pointe vers dash :

# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Sep 27 08:24 /bin/sh -> dash

Alors qu'avec une version précèdente (3.1dfsg-8), sh pointe vers bash :

# ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 2008-06-04 19:00 /bin/sh -> bash

Donc apparemment, dash ne supporte pas la fonction declare.

Dash semble d'ailleurs reprendre beaucoup de caractéristiques du korn shell (mais n'est pas un clone comme décrit dans le man).

La solution est donc de faire "bash monscript.sh".

Vus : 2402
Publié par Scurz : 48