Що таке команда $ ()?


18

Що $()в командах оболонки Linux?

Наприклад:

chmod 777 $(pwd)

1
Зауважте, що немає такої речі, як командна лінія оболонки . Для Linux існує ряд додатків оболонок.
Стефан Шазелас

Відповіді:


21

Це дуже схоже на задню панель ``.

Це називається підміна команд ( специфікація posix ), і вона викликає нижню частину . Команда в дужках $()або між задніми клавішами (``) виконується в підзарядці, а висновок розміщується в початковій команді.

На відміну від задніх $(...)форм, форма може бути вкладена. Таким чином, ви можете використовувати підстановку команд всередині іншої заміни.

Існують особливі відмінності у втікаючих символах в рамках підстановки. Я віддаю перевагу $(...)формі.


4
також можуть бути вкладені задники. Зверніть увагу, що символи нового рядка видаляються з виводу команди.
Стефан Шазелас

2
@ StéphaneChazelas, як можна вкладати backticks? Ви маєте на увазі під ексесивним втечею?
хаос

3
Так: як зecho `echo \`echo foo\`` bar
Стефан Шазелас

1
Будь-яка офіційна довідка, яка говорить про те, що backticks застаріли?
vinc17

1
Знайшов цю відповідь: unix.stackexchange.com/questions/126927/…, здається, вони не застаріли. Змінив мою відповідь, дякую
хаос

5

У POSIX або POSIX-подібних оболонок ( ksh, bash, ash, zsh, yash...), це як ``: команда всередині $()виконується , і замінити його на стандартний висновок. Розбиття слів і генерація імен файлів виконуються, якщо $()немає подвійних лапок. Таким чином

chmod 777 $(pwd)

слід замінити на:

chmod 777 "$(pwd)"

щоб уникнути розбиття слів та генерації імен файлів на поточному шляху робочого каталогу.

Або навіть краще (за винятком деяких оболонок, як-от zsh, у випадку, якщо каталог було перейменовано):

chmod 777 "$PWD"

Так $PWDяк це спеціальна змінна, яка містить шлях до поточного робочого каталогу в оболонках POSIX.

Або ще краще:

chmod 777 .

Оскільки .запис у поточному каталозі є міцним посиланням на сам цей каталог.


2

Це $()використовується для виконання команди переважно всередині якоїсь іншої команди.

chmod 777 $(pwd)

pwdкоманда дає поточний робочий каталог. Отже, коли вся справа виконана, вихід pwd замінить її позицію і буде слугувати аргументом chmod, а результат полягає в тому, що всі ваші теперішні робочі каталоги отримують дозвіл, 777який, напевно, ніколи не слід використовувати у виробничому середовищі;).

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