Bash: Wie man eine Variable aus dem Argument und mit einem Standardwert setzt
Es ist ziemlich klar, dass mit shell scripting diese Art der Sache kann erreicht werden, in der eine riesige Anzahl von Möglichkeiten (mehr als die meisten Programmiersprachen), weil alle anderen Variablen Erweiterung Methoden und Programme wie test
und [
und [[
usw.
Momentan bin ich gerade auf der Suche nach
DIR=$1 or .
Bedeutung, mein DIR-variable enthalten sollte, was angegeben ist in der ersten arg, oder das aktuelle Verzeichnis.
Was ist der Unterschied zwischen dieser und der DIR=${1-.}
?
Finde ich den Bindestrich syntax verwirrend, und versuchen mehr lesbaren syntax.
Warum kann ich nicht das tun?
DIR="$1" || '.'
Ich vermute, das bedeutet "wenn $1 leer ist, wird die Zuordnung funktioniert immer noch (DIR wird leer), so dass der ungültigen Befehl '.' wird nie ausgeführt."
DIR=${1:-.}
ist eine ganz Natürliche Art und Weise zu äußern, diese Logik in eine POSIX-kompatible shell. ${VAR:-default}
- syntax. Ich werde zu Bearbeiten meine Frage, um es weniger kleinlich. Ich bin sicher, Sie waren nicht die downvoter @chepner aber Sie sind absolut Recht! InformationsquelleAutor der Frage Steven Lu | 2013-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehe ich mehrere Fragen hier.
"Kann ich etwas schreiben, tatsächlich spiegelt diese Logik"
Ja. Es gibt ein paar Möglichkeiten, wie Sie es tun können. Hier ist einer:
"Was ist der Unterschied zwischen dieser und der
DIR=${1-.}
?"Die syntax
${1-.}
erweitert, um.
wenn$1
ist ausgeschaltet, wird aber erweitert wie$1
wenn$1
gesetzt ist—auch wenn$1
ist auf die leere Zeichenfolge gesetzt.Die syntax
${1:-.}
erweitert, um.
wenn$1
nicht gesetzt ist oder die leere Zeichenkette. Es dehnt sich wie$1
nur, wenn$1
ist etwas anderes als die leere Zeichenfolge.“Warum kann ich nicht das tun?
DIR="$1" || '.'
"Weil diese bash, nicht perl oder ruby oder eine andere Sprache. (Verzeihen Sie meine Abfälligkeit.)
In der bash,
||
trennt gesamten Befehle (technisch trennt, Rohrleitungen). Es spielt keine separate Ausdrücke.So
DIR="$1" || '.'
bedeutet "ausführenDIR="$1"
, und wenn das beendet mit einem nicht-null exit-code, ausführen'.'
".InformationsquelleAutor der Antwort rob mayoff
Wie wäre es damit:
$#
ist die Anzahl der Argumente zum Skript, und-gt
bedeutet "größer als", so dass Sie im wesentlichenDIR
auf den Standardwert, und wenn der Benutzer angegeben hat, ein argument, dann setzen SieDIR
auf, dass statt.InformationsquelleAutor der Antwort Vaughn Cato