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

12

В 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 ...

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

Exeleration-G
источник
Я думаю, что зависимость от команды -c -Dможет что-то значить в команде 1 и совершенно другая вещь в команде 2.
Ури Эррера
эй, ты изменил 1-ю команду? где редактировать: X
Rinzwind
Я изменил первый комментарий, потому что он содержал неинформативные материалы. Я хотел бы показать примеры, которые являются как можно более относительными. Я сделал комментарий для редактирования в соответствующем разделе для этого. Спасибо за материал -c -D, я понял. Я обновил вопрос.
Exeleration-G
Связанный:  Каковы операторы управления и перенаправления оболочки?
G-Man говорит «Восстановить Монику»

Ответы:

14

См. Раздел Справочного руководства по Bash под названием Shell-Operation и Расширенное руководство по написанию сценариев Bash, Глава 3 (Специальные символы) .

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

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

SaultDon
источник
Расширенный Bash-Scripting Guide - Глава 3 это здорово. Благодарю.
Exeleration-G
Список в главе 3 расширенного руководства по bash-скриптингу неполон и частично неверен. Руководство по расширенному написанию сценариев Bash не является хорошим источником для изучения bash. Вместо этого см. Mywiki.wooledge.org/BashGuide и mywiki.wooledge.org/BashFAQ .
гейра
@geirha Я считаю, что ABS очень полезен, но для символов в конкретной команде я предпочитаю просматривать справочные страницы, и ваши ссылки тоже замечательные - добавлены в закладки. Благодарю.
SaultDon
7

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

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

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

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

roadmr
источник
Хорошо, а что >? Это признак, который я часто вижу, я думал, что это означает «копировать» или что-то в этом роде. Это тоже зависит от команды?
Exeleration-G
3

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

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

Rinzwind
источник
Это очень вероятно, потому что это было взято из другого вопроса здесь. Без контекста это, вероятно, ничего не делает.
Exeleration-G
2

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

Марк Руни
источник
плохая ссылка, пожалуйста, обновите или удалите.
летающий
2

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

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

Посмотрите man echo для -e, это позволяет убежать, поэтому позднее \ e это побег.

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

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

i=foo;echo $i
foo

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

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

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

В твоем случае

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

echo ${i#o}
foo

echo ${i#*o}
o

См. Http://tldp.org/LDP/abs/html/string-manipulation.html.

Далее мы попадаем в субоболочку (х ...)

Bash будет обрабатывать команды в вложенной оболочке и возвращать вывод команд.

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

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

Смотрите: http://tldp.org/LDP/abs/html/testconstructs.html

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

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

test {empty string} И отображать пустую строку или отображать x

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

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

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

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

пантера
источник
1

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

Том
источник