Wie prüft man, ob $*
leer ist? Mit anderen Worten, wie kann geprüft werden, ob für einen Befehl keine Argumente angegeben wurden?
Wie prüft man, ob $*
leer ist? Mit anderen Worten, wie kann geprüft werden, ob für einen Befehl keine Argumente angegeben wurden?
Antworten:
Um zu überprüfen, ob für den Befehl keine Argumente angegeben wurden, überprüfen Sie den Wert der $#
Variablen.
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Wenn Sie verwenden möchten $*
( nicht bevorzugt ), dann
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Einige Erklärungen:
Der zweite Ansatz ist nicht vorzuziehen, da die Erweiterung *
der Positionsparameter von eins ausgehend auf die Positionsparameter ausgedehnt wird. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird sie zu einem einzelnen Wort erweitert, wobei der Wert jedes Parameters durch das erste Zeichen der IFS-Sondervariablen getrennt wird. Das bedeutet, dass eine Zeichenfolge erstellt wird. Es entsteht also zusätzlicher Overhead.
Zum anderen #
erweitert sich die Anzahl der Positionsparameter.
Beispiel:
$ command param1 param2
Hier,
Der Wert von $#
ist 2 und der Wert von $*
ist der String "param1 param2" (ohne Anführungszeichen), wenn IFS nicht gesetzt ist. Wenn IFS nicht gesetzt ist, werden die Parameter durch Leerzeichen getrennt
Weitere Informationen finden man bash
Sie unter dem Thema " Spezielle Parameter"
[ $# -eq 0 ]
ist die häufigste Form von IME. Es gibt Randfälle, in denen "$#"
leer sein kann: Wenn es ein einzelnes Argument gibt, das leer ist, oder wenn es mehrere leere Argumente gibt und $IFS
leer ist.
"$*"
Ausdruck wird auch ausgewertet, ""
wenn nur ein ""
Parameter übergeben wurde. Aber die meiste Zeit werden Sie wahrscheinlich sowieso nicht interessieren.
bash
. Sie verwenden sh
, um das Skript auszuführen. AFAIK ==
ist nur gültig in bash
.
Wenn Sie nur dann auf Kaution gehen möchten, wenn ein bestimmtes Argument fehlt, ist die Parametersubstitution großartig:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
Auf diese Weise können Sie feststellen, dass Sie keine Argumente haben
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ...
, oderif (($# == 0)); ...
, oderif [ $# -eq 0 ]; ...
, oder! (($#)) && ...
, oder(($#)) || ...