J'ai tout un tas de tests sur les variables dans un script shell bash (3.00) où si la variable n'est pas définie, elle attribue une valeur par défaut, par exemple:
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
Je semble me rappeler qu'il y a une syntaxe pour faire cela en une seule ligne, quelque chose qui ressemble à un opérateur ternaire, par exemple:
FOO=${ ${VARIABLE} : 'default' }
(même si je sais que ça ne marchera pas ...)
Suis-je fou, ou existe-t-il quelque chose comme ça?
Réponses:
Très proche de ce que vous avez posté, en fait:
Ou, qui assignera
default
àVARIABLE
ainsi:la source
Pour les arguments de ligne de commande:
qui assigne à
VARIABLE
la valeur du 1er argument passé au script ou à la valeur deDEFAULTVALUE
si aucun tel argument n'a été passé.la source
Si la variable est la même, alors
affecte DEFAULT_VALUE à VARIABLE s'il n'est pas défini. Les guillemets doubles empêchent la globalisation et la division des mots.
Voir également la section 3.5.3, Expansion des paramètres du shell , dans le manuel de Bash.
la source
HISTTIMEFORMAT
: ${FOO:=DEFAULT1} ${BAR:=DEFAULT2}
Même vous pouvez utiliser comme valeur par défaut la valeur d'une autre variable
avoir un dossier
defvalue.sh
exécuter la
./defvalue.sh first-value second-value
sortieet exécuter la
./defvalue.sh first-value
sortiela source
voir ici sous 3.5.3 (expansion des paramètres du shell)
donc dans ton cas
la source
Pour répondre à votre question et sur toutes les substitutions variables
la source
FWIW, vous pouvez fournir un message d'erreur comme ceci:
Cela affiche un message comme celui-ci et se termine avec le code 1:
Un exemple plus complet de tout:
Production:
$ACTION
prend la valeur du premier argument et quitte s'il est vide$DIRNAME
est le 2ème argument, et revient par défaut au répertoire courant$OUTPUT_DIR
est le 3ème argument ou$HOMEDIR
(si elle est définie), sinon,/tmp
. Cela fonctionne sur OS X, mais je ne suis pas certain que ce soit portable.la source
Ensuite, il y a la façon d'exprimer plus laconiquement votre construction `` if '':
la source
Voici un exemple
enregistrez-le sous script.sh et rendez-le exécutable. exécutez-le sans params
exécutez-le avec param
la source