Використання зворотних посилань або долара в оболонках скриптів


9

Я зайнятий написанням сценарію оболонки (використовую Bash), де мені потрібно заповнити якусь змінну з поверненого результату іншої команди.

Тому я використовую такий синтаксис:

VAR=`command 2>/dev/null`

Але, шукаючи інформацію про оболонки сценарію, часто виявляв, що вищезазначеного можна досягти, використовуючи і наступний синтаксис:

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

Обидва працюють для мене (я отримав очікуваний результат в обох випадках), і тому мені цікаво, чи можу я все-таки використовувати обидві форми як взаємозамінні, чи мені доведеться дотримуватися однієї форми, щоб бути впевненою в майбутньому. оболонки?



Посилання від belacqua пропонують багато інформації про відмінності та використання. Закриття, оскільки воно не пов'язане з проблемою Ubuntu, а більше програмним. Я настійно рекомендую дотримуватися вищезазначених посилань.
Луїс Альварадо

Відповіді:


13

Використовуйте долар. Бекстіки є напівзастареними , оскільки вони складніші у використанні (див. Посилання), і переваг для них немає, якщо ви не робите код гольфу і абсолютно не потрібно зберегти одного символу. Вони, мабуть, незабаром не будуть вилучені з популярних снарядів, тому ви зараз безпечні, використовуючи будь-який.


3

Дотримуйтесь позначення знака долара, $()коли зможете. Повернення стає громіздким / заплутаним, коли вам потрібно робити вкладене цитування. Наприклад:

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

Заміна зворотних посилань $()дає той самий вихід, і його легше читати (менша кількість лапок різних кутів розрізнення):

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

Це, і кожна лапка (одна цитата, подвійна цитата, зворотний вибір) означає щось інше в оболонці, тому використання $ може допомогти зняти рівень складності. І розробник, який стежить за вами, буде вам вдячний, адже йому / їй буде легше зрозуміти, що ви зробили.


Зворотні посилання навіть не можуть бути вкладені функціонально.
Бернхард

@ Бернхард Мій приклад показує, що я мав на увазі під цим твердженням.
Аарон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.