J'ai un script simple dans lequel le premier argument est réservé au nom de fichier et tous les autres arguments facultatifs doivent être transmis à d'autres parties du script.
En utilisant Google, j'ai trouvé ce wiki , mais il fournit un exemple littéral:
echo "${@: -1}"
Je ne peux rien faire d’autre, comme:
echo "${@:2}"
ou
echo "${@:2,1}"
Je reçois une "mauvaise substitution" du terminal.
Quel est le problème et comment puis-je traiter tout sauf le premier argument transmis à un script bash?
Utilisez ceci:
echo "${@:2}"
La syntaxe suivante:
echo "${*:2}"
fonctionnerait aussi bien, mais n’est pas recommandé, car @ Gordon déjà expliqué que, si on utilise *
, tous les arguments sont exécutés ensemble en tant qu’argument unique avec des espaces, tandis que @
préserve les séparations entre elles (même si certains des arguments contiennent des espaces). Cela 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
essayez
first_arg="$1"
shift
echo First argument: "$first_arg"
echo Remaining arguments: "$@"
shift [n]
décale les paramètres de position n fois. A shift
définit la valeur de $1
sur la valeur de $2
, la valeur de $2
sur la valeur de $3
, etc., en diminuant la valeur. de $#
par un.
http://wiki.bash-hackers.org/scripting/posparams
Il explique l'utilisation de shift
(si vous souhaitez supprimer les N premiers paramètres), puis implémentation de Mass Usage