Beim Schreiben eines Shell-Skripts stieß ich auf ein Problem mit der folgenden if / else-Anweisung, die sich irgendwo in der Mitte des Skripts befindet:
if [ $act -eq "add" ]
then
read - "add or update: " $comm
git commit -m "$comm $file"
else
git commit -m "$act $file"
fi
Der zurückgegebene Fehler ist:
./gitup: line 13: [: add: integer expression expected
und fährt dann mit dem Rest des Skripts fort. Wie kann das if-Segment die Variable eher mit einer Zeichenfolge als mit einer Ganzzahl bewerten / vergleichen lassen? Bei der Verwendung von "! =" war unter anderem ein anderer Fehler erforderlich.
bash
shell-script
bash-scripting
tony_perkis666
quelle
quelle
[[]]
Test ein Bash-spezifisches Konstrukt ist und dieses Beispiel mit POSIX genauso gut funktioniert[]
wie in der Frage. Wenn der Interpreter explizit als#!/bin/bash
oder ähnlich angegeben wird,[[]]
kann der ohne Probleme verwendet werden (und es ist ein bisschen schneller als die Alternative in Bash , glaube ich - nicht, dass es sowieso ein Flaschenhals sein sollte), ansonsten sollte man bleiben[]
. Wenn man keine Bash-Angaben benötigt, läuft das Skript in zB Dash etwas schneller. Und POSIX stellt die inhärente Portabilität sicher.Diese Methode würde auch funktionieren. Sehr ähnlich zu @ Gurus Antwort, jedoch ohne doppelte eckige Klammern.
quelle