Podczas pisania skryptu powłoki napotkałem problem z następującą instrukcją if / else, która znajduje się gdzieś w środku skryptu:
if [ $act -eq "add" ]
then
read - "add or update: " $comm
git commit -m "$comm $file"
else
git commit -m "$act $file"
fi
Błąd powrotu to:
./gitup: line 13: [: add: integer expression expected
a następnie przechodzi do dalszej części skryptu. Jak mogę sprawić, aby segment if oceniał / porównywał zmienną z wejściem ciągu, a nie liczbą całkowitą; inny błąd był wymagany przy użyciu „! =” spośród kilku innych rzeczy, które próbowałem.
bash
shell-script
bash-scripting
tony_perkis666
źródło
źródło
[[]]
test jest konstrukcją specyficzną dla Bash, a ten przykład działa równie dobrze z POSIX-em[]
użytym w pytaniu. Jeśli interpreter jest jawnie podany jako#!/bin/bash
lub podobny,[[]]
można go używać bez problemów (i sądzę, że jest to nieco szybsze niż alternatywa w Bash - nie, że i tak powinien być szyjką butelki), w przeciwnym razie należy się trzymać[]
. Jeśli w ogóle nie potrzebujesz specyfikacji Bash, skrypt będzie działał nieco szybciej, np. W Dash. A POSIX zapewnia wewnętrzną przenośność.Ta metoda również działałaby. Bardzo podobny do odpowiedzi @ Guru, ale eliminuje potrzebę stosowania podwójnych nawiasów kwadratowych.
źródło