Que signifie ce «-n»? [BASH]

Veuillez jeter un œil à cet exemple de code:

MIN=10 if [ -n "$1" ]; then echo "$1"; fi if [ -n "$2" ]; then echo "$2"; fi if [ -n "$3" ]; then echo "$3"; fi if [ -n "$4" ]; then echo "$4"; fi if [ -n "$5" ]; then echo "$5"; fi if [ -n "$6" ]; then echo "$6"; fi if [ -n "$7" ]; then echo "$7"; fi if [ -n "$8" ]; then echo "$8"; fi if [ -n "$9" ]; then echo "$9"; fi if [ -n "${10}" ]; then echo "${10}"; fi echo "List of arguments: "$*"" echo "Name of this script: "$0"" if [ $# -lt "$MIN" ]; then echo "Not enough arguments, need $MIN to run."; fi 

Pour exemple, la sortie du terminal de $./new.sh q w e r t y u i o p sera:

q w e r t y u i o p List of arguments: q w e r t y u i o p Name of this script: ./new.sh 

Et la sortie de $./new.sh q w e r t y u i o sera:

q w e r t y u i o List of arguments: q w e r t y u i o Name of this script: ./new.sh Not enough arguments, need 10 to run. 

Question : Que signifie -n?

Commentaires

Réponse

[ est un autre nom pour le test intégré, voir ici et ici , aussi this .

Cette séquence de if les déclarations seraient probablement mieux en boucle. Dans Bash, nous pourrions utiliser lexpansion indirecte:

for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done 

Lidiome le plus courant serait probablement dutiliser shift sur chaque itération, mais cela détruit la liste des arguments.

De plus, la citation: ici $0 est en dehors des guillemets. Dans la plupart des cas, il est plus utile de conserver toutes les extensions de variables entre guillemets, sauf si vous souhaitez explicitement partage de mots et extension de nom de fichier.

echo "Name of this script: "$0"" 

Alors, écrivez plutôt:

echo "Name of this script: $0" 

Commentaires

  • Vous pouvez utiliser shift dans une fonction et ne pas affecter la liste darguments de lappelant ', bien que lutilisation dune fonction juste pour cela soit évidemment un peu hackish.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *