J'ai un simple script où le premier argument est réservé au nom de fichier, et tous les autres arguments optionnels doivent être passés à d'autres parties du script.
En utilisant Google, j'ai trouvé ce wiki mais elle a fourni un exemple concret :
echo "${@: -1}"
Je n'arrive pas à faire fonctionner autre chose, comme :
echo "${@:2}"
ou
echo "${@:2,1}"
J'obtiens "Bad substitution" dans le terminal.
Quel est le problème, et comment puis-je traiter tous les arguments sauf le premier passé à un bash script ?
39 votes
Pour appeler tous ceux qui ont été confondus, le mauvais shebang a été fourni en causant
"{@:2}"
ne fonctionne pas, c'est pourquoi la bonne réponse correspond à la réponse ci-dessus.6 votes
Vous avez juste utilisé le shell par défaut, qui est dash sur Ubuntu et beaucoup d'autres Linuxes. En dash "${@ : -1}" est interprété comme : {parameter:-word} - Utiliser les valeurs par défaut, et utiliser word si le paramètre n'est pas défini ou est nul. Donc, en tiret "${@ : -1}" donne exactement le même résultat que "$@". Pour utiliser bash, il suffit d'utiliser la première ligne suivante dans le fichier script : #!/bin/bash