Что означают эти символы в некоторых командах терминала Linux?

В AskUbuntu я видел несколько команд, которые выглядят довольно сложными, с большим количеством символов в них. Чтобы лучше понять, как создаются эти команды, я хотел бы знать, что означают символы.

Например:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

или даже более сложным:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

Я очень хорошо понимаю, что добавление параметров в качестве -c, --debug, оказывают определенное влияние на основную команду. Значения этих слов почти во всех случаях можно найти в man страниц, так что это не совсем то, что я ищу.

Пожалуйста, попробуйте в своем ответе определить, что конкретно делают символы, вместо того, чтобы объяснять приведенные мной примеры. Это могло бы выглядеть примерно так:

" means 'argument': the main command uses anything within these symbols as its source^ is used for ...# is used for ...

Заранее спасибо

Видеть Справочное руководство по Bash раздел под названием Оболочка-Операция и Расширенное руководство по написанию сценариев Bash Глава 3 (Специальные символы).

Я обращаюсь к ним всякий раз, когда мне нужно узнать что-то новое о сценариях оболочки в ubuntu / linux.

Я думаю, вы найдете главу 3 АБС самой простой для навигации в ваших целях. Все символы отображаются в крайнем левом углу страницы с описанием непосредственно под ними.

К сожалению, вам придется перейти на справочные страницы, так как "символы" могут иметь разные значения в зависимости от того, какая команда их читает.

Например, в вашей первой команде значение {} и \; зависит от команды find (man find). Значение кавычек в аргументе sed зависит либо от sed, либо от bash (поскольку это параметр в кавычках, он потенциально может быть частью оболочки). ~ / - это определенно расширение шаблона bash.

Что касается второй сложной команды, то она в основном повторяет материал, так что большую часть информации об этом вы найдете на справочной странице bash.

>Чтобы ответить на ваш комментарий к этому, символы перенаправления < | используются для передачи данных из файлов и в файлы (больше и меньше знаков), а также для соединения вывода команды с вводом другой команды (канал |). Видеть здесь для получения хорошего руководства по перенаправлению ввода-вывода, это очень мощная функция дизайна оболочки и набора инструментов Unix.

1-й выполняет поиск файлов, заканчивающихся на .c из каталога ~/ и execутес sed (упрощенный редактор), где sed sушные вкладыши для cybernetnews и превращает его в cybernet.

2 - й ускользает от меня ... показывает пустой результат при выполнении.

Лучший ресурс, который я нашел для изучения команд терминала, - это LinuxCommand, в нем приведены подробные описания наиболее часто используемых доступных команд.

Трудно передать вам полное значение символов, поскольку вы вставляете сложные команды.

Эхо, в частности.

Смотрите man echo для -e , это позволяет избежать , так что lateer \ e - это побег.

Большинство других символов представляют собой манипуляции со строками.

Итак, представьте, что у вас есть переменная i, которая содержит строку "foo".

i=foo;echo $ifoo

Но это становится более сложным, если ваша переменная, $i, также является частью строки

echo $ibar # Note: no outputecho ${i}bar # we have outputfoobar

Теперь вы также можете манипулировать строками, печатая только часть

В вашем случае

${i#*=} = выведите $i , вычеркните кратчайшее совпадение между * и = , но * само по себе является подстановочным знаком ..

echo ${i#o}fooecho ${i#*o}o

Видеть http://tldp.org/LDP/abs/html/string-manipulation.html

Затем мы попадаем в вспомогательный снаряд ( x ... )

Bash обработает команды во вложенной оболочке и вернет выходные данные команд.

x = (подстрока i ); продолжить

Теперь у нас есть тест, [ "${!x}" ]

Видеть : http://tldp.org/LDP/abs/html/testconstructs.html

И вот тут я больше ничего не могу вам сказать.

В bash ${!x} будет пустой строкой.&& == логично и || логично или

test {пустая строка} И echo пустая строка или echo x

Вам нужно было бы указать больше синтаксиса, но, похоже, это эхо-сообщение где-то передает его вывод.

Снова [ ] - это тест, и мы избежали [ в самом начале.

Так что я могу объяснить только очень многое из того, что делает echo.

Причина, по которой при вводе команды echo в терминале нет выходных данных, заключается в том, что это фрагмент кода, по умолчанию ни x, ни i не определены, поэтому все выходные данные пусты.

Если у вас есть вопросы о символах на определенных языках, вы можете попробовать СимволХаунд. Вы можете искать в Интернете символы, которые Google не находит.

Я думаю, что это зависит от команды -c -D, которая может означать что-то в команде 1 и совершенно другое в команде 2.

эй, ты изменил 1-ю команду? где правка :X

Я действительно изменил 1-й комментарий, потому что в нем содержался неинформативный материал. Я хотел бы показать примеры, которые являются как можно более относительными. Для этого я сделал комментарий к редактированию в соответствующем разделе.

Спасибо за все эти штучки, я понимаю. Я обновил вопрос.

Связанный: Каковы операторы управления и перенаправления оболочки?