Was bedeutet dieses „-n“? [BASH]

Sehen Sie sich dieses Codebeispiel an:

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 Beispiel: Die Terminalausgabe von $./new.sh q w e r t y u i o p lautet:

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 

und die Ausgabe von $./new.sh q w e r t y u i o lautet:

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. 

Frage : Was bedeutet die -n?

Kommentare

Antwort

[ ist ein anderer Name für das eingebaute test, siehe hier und hier , auch this .

Diese Sequenz von if Aussagen wären wahrscheinlich besser als Schleife. In Bash könnten wir eine indirekte Erweiterung verwenden:

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

Die häufigere Redewendung wäre wahrscheinlich die Verwendung von shift für jeden Iteration, aber es zerstört die Argumentliste.

Außerdem zitiert: hier $0 außerhalb der Anführungszeichen. In den meisten Fällen ist es sinnvoller, alle Variablenerweiterungen in Anführungszeichen zu setzen, es sei denn, Sie möchten ausdrücklich Wortaufteilung und Dateinamenerweiterung.

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

Schreiben Sie also lieber:

echo "Name of this script: $0" 

Kommentare

  • Sie können shift innerhalb einer Funktion verwenden und die Argumentliste des Aufrufers ' nicht beeinflussen, obwohl die Verwendung einer Funktion nur dafür offensichtlich ein bisschen ist hackisch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.