Ich habe das Skript unten, um die Anzahl der Dateien zwischen zwei Verzeichnissen zu subtrahieren, aber der COUNT=
Ausdruck funktioniert nicht. Was ist die richtige Syntax?
#!/usr/bin/env bash
FIRSTV=`ls -1 | wc -l`
cd ..
SECONDV=`ls -1 | wc -l`
COUNT=expr $FIRSTV-$SECONDV ## -> gives 'command not found' error
echo $COUNT
Antworten:
Sie brauchen nur ein kleines Leerzeichen um das Minuszeichen und Backticks:
Beachten Sie den Exit-Status:
Der Exit-Status ist 0, wenn EXPRESSION weder null noch 0 ist, 1, wenn EXPRESSION null oder 0 ist .
Beachten Sie dies, wenn Sie den Ausdruck in einem Bash-Skript in Kombination mit set -e verwenden, das sofort beendet wird, wenn ein Befehl mit einem Status ungleich Null beendet wird.
quelle
sh
Shell. Aus Gründen der Portabilität möchten Sie möglicherweise diese Antwort verwenden.Versuchen Sie diese Bash-Syntax, anstatt ein externes Programm zu verwenden
expr
:Übrigens
expr
lautet die korrekte Syntax :Beachten Sie jedoch, dass die Verwendung
expr
langsamer sein wird als die oben angegebene interne Bash-Syntax.quelle
$(command)
Syntax für die Befehlssubstitution. Da BASH arithmetische Operationen unterstützt$(( ... ))
, ist es auch besser, kein externes Dienstprogramm zu verwendenexpr
$(( ... ))
wird zur Auswertung von arithmetischen Ausdrücken verwendet.Sie können verwenden:
um zu vermeiden, dass ein separater Prozess gemäß dem folgenden Transkript aufgerufen wird:
quelle
Leerraum ist wichtig,
expr
erwartet seine Operanden und Operatoren als separate Argumente. Sie müssen auch die Ausgabe erfassen. So was:Es ist jedoch üblicher, die eingebaute arithmetische Erweiterung zu verwenden:
quelle
So mache ich in Bash immer Mathe:
quelle
|bc
Typbefehl abzufangen, als ihn ein- oder zweimal zu verpassen. Verschiedene Schläge für verschiedene Leute, wie sie sagen.Für eine einfache Ganzzahlarithmetik können Sie auch den eingebauten Befehl let verwenden .
Weitere Informationen
let
finden Sie hier .quelle
let "sanity_check_duration=sanity_check_duration_end_time_delay_sec - sanity_check_duration_start_time_delay_sec"
(Entfernen des Dollarzeichens aus Variablen)Alternativ zu den vorgeschlagenen 3 Methoden können Sie versuchen
let
, arithmetische Operationen für Variablen wie folgt auszuführen:let COUNT=$FIRSTV-$SECONDV
oder
let COUNT=FIRSTV-SECONDV
quelle
Verwenden Sie Python:
Ausgabe
quelle