Traiter tous les arguments sauf le premier (dans un script bash))
j'ai un script simple où le premier argument est réservé pour le nom du 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 il a fourni un exemple littéral:
echo "${@: -1}"
je ne peux pas obtenir quoi que ce soit d'autre pour travailler, comme:
echo "${@:2}"
ou
echo "${@:2,1}"
je obtenir "Mauvaise substitution de" de la terminal.
Quel est le problème, et comment puis-je traiter tout sauf le premier argument passé à un script bash?
3 réponses
utilisez ceci:
echo "${@:2}"
la syntaxe suivante:
echo "${*:2}"
fonctionnerait aussi bien, mais n'est pas recommandé, parce que comme @Gordon déjà expliqué, qu'en utilisant *
, il exécute tous les arguments ensemble comme un seul argument avec des espaces, tandis que @
préserve les ruptures entre eux (même si certains des arguments eux-mêmes contiennent des espaces). Il ne fait pas la différence avec echo
, mais cela compte pour beaucoup d'autres commandes.
si vous voulez une solution qui fonctionne aussi dans /bin/sh
essayer
first_arg=""
shift
echo First argument: "$first_arg"
echo Remaining arguments: "$@"
shift [n]
déplace les paramètres de position n fois. Un shift
définit la valeur de à la valeur
, la valeur de
à la valeur
, et ainsi de suite, la diminution de la valeur de
$#
par un.
http://wiki.bash-hackers.org/scripting/posparams
il explique l'utilisation de shift
(si vous voulez rejeter les premiers n Paramètres) et ensuite mettre en œuvre L'utilisation de masse (rechercher le titre avec ce titre).