
Ich habe mich gefragt, ob mir jemand helfen kann:
if [ -z $1 ]; then
user=$(whoami)
else
if [ ! -d "/home/$1" ]; then
echo "Requested $1 user home directory doesn't exist."
exit 1
fi
user=$1
fi
Ich habe mir einige Bash-Befehle angesehen und dabei zwei Befehle gesehen: -z
und -d
. Ich weiß, was sie tun (zuerst nach leeren Variablen suchen und dann nach vorhandenem Verzeichnis). Meine Frage ist, wie ich Beschreibungen zu diesen Befehlen finden kann (z. B. Manpage -d/-z). Können sie nur mit if-else-Anweisungen verwendet werden?
Antwort1
Die -d
und -z
sind keine Befehle, sondern Optionen für die Dienstprogramme test
und [
. Diese Dienstprogramme sind in das Handbuch integriert bash
und dort dokumentiert bash
. Diese Dienstprogramme und diese Flags sind zufällig auch von POSIX standardisiert, sodass sie in jeder POSIX-Shell verfügbar sind, nicht nur bash
.
Wenn Sie sich in einer interaktiven bash
Sitzung befinden, können Sie Dokumentation zu den integrierten Varianten dieser Dienstprogramme erhalten, indem Sie help test
( eingeben help [
. Das funktioniert auch, aber der Text verweist lediglich auf die Dokumentation für test
).
man test
und man [
sollte auch funktionieren. Diese Handbücher beschreiben dieexternDienstprogramme, wahrscheinlich /bin/test
und /bin/[
, nicht diejenigen, die Sie standardmäßig in verwenden bash
.
So zum Beispiel
! test -z "$dir" && test -d "$dir" && printf '%s is a directory' "$dir"
ist genau gleichbedeutend mit
! [ -z "$dir" ] && [ -d "$dir" ] && printf '%s is a directory' "$dir"
oder, wenn Sie so wollen,
if ! test -z "$dir" && test -d "$dir"; then
printf '%s is a directory' "$dir"
fi
Und
if ! [ -z "$dir" ] && [ -d "$dir" ]; then
printf '%s is a directory' "$dir"
fi
( ! [ -z "$dir" ]
würde wahrscheinlich häufiger als [ ! -z "$dir" ]
oder geschrieben werden [ -n "$dir" ]
, und ich habe den -z
obigen Test nur verwendet, weil er in der Frage erwähnt wurde, der -d
Test für eine leere Zeichenfolge würde sowieso fehlschlagen).
Siehe auch: