But du colon en expansion variable
J'examine un ancien script shell. Je ne peux pas comprendre deux choses.
rm /data/log || true
value=$(cat /datafile) if [ ${value: -1} == 0 ]
then echo 'do'
else echo 'dont'
fi
value: -1- Qu'est-ce que ça fait réellement?rm /data/log || true- Qu'est-ce que ça||truefait?
Réponses
rm /data/log || trueest seulement (dans mon humble expérience) utile si le script est exécuté avec set -e. set -efait sortir le shell lorsqu'une commande se termine avec un état d'erreur. Le créateur du script n'était apparemment pas au courant du -fdrapeau pour rm.
${value: -1}est probablement une faute de frappe. Cela devrait être ${value:-1}, en fournissant la valeur par défaut (1, pas -1; cela -fait partie de la :-syntaxe) pour l'expansion de variable si elle valueest nulle ou non définie.
Si cela devrait vraiment être le cas ${value: -1}, voyez la réponse de Glenn Jackman pour la signification réelle.
${value: -1}se développe jusqu'au dernier caractère du contenu de la variable.
${value:-1}est différent de ${value: -1}!
En se référant à l' extension des paramètres du shell dans le manuel:
${value:-1}se développe au contenu de lavaluevariable, ou si la variable n'est pas définie ou vide, à la chaîne "1"${value: -1}est une forme abrégée du${var:offset:length}formulaire pour extraire une sous-chaîne du contenu variable. Un décalage de-1signifie "un caractère à partir de la fin de la chaîne". La:lengthpartie est manquante, donc la sous-chaîne est prise de laoffsetà la fin de la chaîne.Le manuel dit:
Notez qu'un décalage négatif doit être séparé des deux points par au moins un espace pour éviter d'être confondu avec le développement ': -'.
À partir de bash (1): $ {paramètre: -word} Utilisez les valeurs par défaut. Si le paramètre n'est pas défini ou nul, le développement du mot est remplacé. Sinon, la valeur du paramètre est remplacée.
|| trues'assure que la commande renvoie vrai. ||est un opérateur OR de court-circuit, si la commande en face retourne false, la commande après son exécution et la valeur de retour utilisée.