Vad betyder detta `-n`? [BASH]

Ta en titt på detta kodexempel:

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 

För Exempel på terminalutgången för $./new.sh q w e r t y u i o p:

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 

Och utdata från $./new.sh q w e r t y u i o kommer att vara:

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. 

Fråga : Vad betyder -n?

Kommentarer

Svar

[ är ett annat namn för test inbyggt, se här och här , även detta .

Den sekvensen av if uttalanden skulle troligen vara bättre än en slinga. I Bash kan vi använda indirekt expansion:

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

Det vanligaste idiomet skulle förmodligen vara att använda shift på varje iteration, men det förstör argumentlistan.

Citera: här $0 är också utanför citaten. I de flesta fall är det mer användbart att hålla alla variabla utvidgningar inom citat, såvida du inte uttryckligen vill ha orddelning och filnamnsexpansion.

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

Så skriv snarare:

echo "Name of this script: $0" 

Kommentarer

  • Du kan använda shift inuti en funktion och inte påverka den som ringer ' s argumentlista, men att använda en funktion bara för det är uppenbarligen lite hackig.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *