Як продовжувати речення з командою всередині


12

Наприклад, я намагався сказати "Наразі 10 людей в Інтернеті" у моєму файлі сценаріїв.

Мені ніколи не здається, що команда працює без частини "люди в мережі" на наступному рядку.

На даний момент у мене є

w='who | wc -l' 
echo "There are $w people online at the moment" 

Однак я завжди закінчую результат

There are who | wc -l users online at the moment 

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

Відповіді:


20

Ви хочете вихід

who | wc -l

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

w=$(who | wc -l)
echo "There are $w people online at the moment"

(ви також можете використовувати зворотні котирування, але ви не можете їх легко вкласти).


У деяких оболонках, включаючи Bash, можна вкладати зворотні котирування. Вона вимагає вкладених пагонів, дивись приклад на stackoverflow.com/a/2657037/776723
ShadSterling

1
@Polyergic Дякую Я оновив свою відповідь, але думаю, що буду дотримуватися гніздування $();-)
Антон

10

Ще одне рішення:

echo There are $(who | wc -l) people online at the moment


5

ви повинні використовувати backtick для виконання команди

w=`who | wc -l` echo "There are $w people online at the moment"



7
Дійсна точка. "Зворотний вибір також легко плутати з однією цитатою." саме те, що тут сталося.
Ганіма

@Ghanima: Дійсно! Це питання є прекрасним прикладом для того, коли нам потрібно продемонструвати, чому слід уникати підстав. :)
PM 2Ring

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