Есть ли способ вывести $@ дословно?

lshw — это программа, в которой перечислены сведения обо всем доступном оборудовании. Вы можете просто запустить его и направить вывод на пейджер, такой как less, чтобы просмотреть и найти весь вывод, или, если вы уже знаете, какие разделы вас интересуют, вы можете выборочно вывести «класс», в ваш случай lshw -class network, который покажет вам подробную информацию о любом существующем сетевом оборудовании, в том числе о любом адаптере Wi-Fi (s ).

4
02.11.2019, 19:25
2 ответа

В вашем примере позиционные параметры не содержат двойных кавычек:

./script1 a "bc d"

Двойные кавычки просто указывают оболочке, что не следует выполнять разбиение слов на пробел между bcи d.

Если вы хотите, чтобы ваш второй параметр содержал литеральные кавычки, вам нужно экранировать их, чтобы указать оболочке, что они литералы:

./script1 a '"bc d"'

или

./script1 a \"bc\ d\"

Вы можете использовать printfдля печати их в формате, который можно повторно использовать в качестве ввода оболочки (с экранированием):

$ set -- a "bc d"
$ printf '%q\n' "$@"
a
bc\ d

Как вы можете видеть, это только выходит за пределы пробела.

10
27.01.2020, 20:46

Как объяснялось в другом месте, вводимые вами двойные кавычки указывают оболочке, что заключенный в них текст следует рассматривать как одно слово. Если вы хотите распечатать слова, заключенные в кавычки, это довольно просто; вам просто нужно включить их в текст, который вы выводите:

#!/bin/bash
printf '"%s" ' "$@"
printf "\n"

Обратите внимание, что это добавит двойные кавычки к каждому аргументу, а не только к тем, которые могли быть в них при выполнении команды.

5
27.01.2020, 20:46

Теги

Похожие вопросы