Jestem nowy w programowaniu bash. Przeczytałem dwa dobre, długie przewodniki, ale zrobiły mi bałagan na temat operatorów i słów kluczowych.
Które są powszechnie i szeroko stosowane? Nie wiem, kiedy użyć, i dlaczego.
test
,[[ ]]
Lub[ ]
nawet(( ))
$((exp))
lub$[exp]
-gt
lub>
,ge
lub>=
etc.- kiedy używać
<
i />
lub( )
kiedy musimy przed tym uciec\:
\<
\(
itp. ==
lub=
(porównania ciągów)
Znam podstawowe różnice między [
a [[
jednak inne kwestie są dla mnie tajemnicą.
Z góry dziękuję
command-line
bash
programming
scripts
MikeD
źródło
źródło
Odpowiedzi:
test
jest wbudowaną powłoką, która (oczywiście) testuje w określonych warunkach. Niektóre starsze powłoki wymagają specjalnego polecenia. Więc znajdziesz również program na/usr/bin/test
.[
to także program do testowania niektórych warunków. To oprogramowanie wymaga również klamry zamykającej i można je znaleźć pod adresem/usr/bin/[
.[[…]]
jest alternatywą dlatest
i[
. Został opracowany dla powłoki Korn (ksh
). Ale znajdziesz go również w wersjach Bash większych niż 2 oraz w Z Shell. Podwójne nawiasy mają kilka ciekawych cech:-a
(AND) lub-o
(OR) możesz użyć&&
lub||
.=
Można zrobić dużo więcej.((…))
jest równoważne zlet
. Zasadniczo((expression))
jest taki sam jaklet "expression"
. Jednak zelet
można użyć więcej niż jeden wyraz, ale podwójne szelki umożliwiają tylko jeden wyraz.$((…))
(a także$[…]
) wykonuje pewne obliczenia. Powłoka próbuje obliczyć wyrażenie w nawiasach klamrowych i zastępuje je wynikiem. Więcecho $((1+1))
prowadzi doecho 2
. Więc twoje muszle wypisują liczbę 2.Za każdym razem, gdy chcemy porównać dwie liczby należy użyć opcji z myślnikiem i dwóch liter (
-ge
,-lt
etc.). Jeśli chcesz porównać ciągi, powinieneś użyć=
lub!=
.Na twoje pytanie dotyczące ucieczki trudno jest odpowiedzieć. Ponieważ zależy to od oprogramowania, którego używasz oprócz powłoki. Więc to jest
grep
igrep -E
trzeba inną ucieczkę. Jest to również miejsce w przypadkused
,awk
i inni. Najlepszą opcją jest spojrzenie na stronę podręcznika. Po pewnym czasie przyzwyczajasz się i wiesz, kiedy użyć ucieczki.źródło
if [ 2 -gt 1 ]; …
jest to bardziej powszechne, ponieważ widzę to częściej w skryptach powłoki i, o ile wiem, jest to zgodne z POSIX.