Bash-Befehle werden nicht gefunden

Bash-Befehle werden nicht gefunden

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: -zund -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 -dund -zsind keine Befehle, sondern Optionen für die Dienstprogramme testund [. Diese Dienstprogramme sind in das Handbuch integriert bashund 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 bashSitzung 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 testund man [sollte auch funktionieren. Diese Handbücher beschreiben dieexternDienstprogramme, wahrscheinlich /bin/testund /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 -zobigen Test nur verwendet, weil er in der Frage erwähnt wurde, der -dTest für eine leere Zeichenfolge würde sowieso fehlschlagen).

Siehe auch:

verwandte Informationen