Używanie zwrotników lub dolara w skryptach powłoki


9

Jestem zajęty pisaniem skryptu powłoki (używając Bash), w którym muszę wypełnić zmienną ze zwróconego wyniku innej komendy.

Używam więc takiej składni:

VAR=`command 2>/dev/null`

Ale szukając informacji o powłokach skryptów, często stwierdziłem, że powyższe można osiągnąć również przy użyciu następującej składni:

VAR=$(command 2>/dev/null)

Oba działają dla mnie (w obu przypadkach uzyskałem oczekiwany wynik) i dlatego zastanawiam się, czy nadal mogę używać obu formularzy zamiennie, czy też muszę trzymać się jednej formy, aby upewnić się, że będę zgodny z przyszłym rozwojem muszla ?



Linki belacqua zawierają wiele informacji na temat różnic i użytkowania. Zamykanie, ponieważ nie jest związane z problemem Ubuntu, ale raczej z kwestią programowania. Gorąco polecam za pomocą linków wymienionych powyżej.
Luis Alvarado,

Odpowiedzi:


13

Użyj dolara. Backticks są częściowo przestarzałe , ponieważ są bardziej skomplikowane w użyciu (patrz link) i nie mają żadnych zalet, chyba że uprawiasz golfa i absolutnie nie musisz zapisywać jednego znaku. Prawdopodobnie nie zostaną one usunięte z popularnych powłok w najbliższym czasie, więc na razie możesz z nich korzystać bezpiecznie.


3

Trzymaj się notacji dolara, $()kiedy tylko możesz. Backticks stają się nieporęczne / mylące, gdy zaczynasz wykonywać cytowanie zagnieżdżone. Dawny:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Zastąpienie backticksa $()daje ten sam wynik i jest łatwiejsze do odczytania (mniej cytatów o różnych kątach do rozróżnienia):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

To, a każdy znak cudzysłowu (pojedynczy cudzysłów, podwójny cudzysłów, backtick) oznacza coś innego w powłoce, więc użycie $ może pomóc usunąć poziom złożoności. Deweloper, który podąży za tobą, będzie ci wdzięczny, bo łatwiej będzie ci się dowiedzieć, co zrobiłeś.


Backticks nie mogą być nawet zagnieżdżone funkcjonalnie.
Bernhard

@Bernhard Mój przykład pokazuje, co miałem na myśli z tym stwierdzeniem.
Aaron
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.