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
- Haben Sie die Bash-Manpage überprüft oder
help test
gelesen? - pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html und mywiki.wooledge. org / BashGuide / TestsAndConditionals . Es überrascht nicht, dass Dinge wie
[
und-n
fürchterlich zu suchen sind. - @ilkkachu Sicherlich ist es total Anfänger wie ich.
- Wenn Sie hierher gekommen sind und sich gefragt haben, was
bash -n myscript
tut, führt es eine -Syntaxprüfung durch im Skript, anstatt es auszuführen.
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.