Що означають ці символи в деяких командах 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 ...

Спасибі заздалегідь


Я думаю, що залежність від команди -c -Dможе означати щось у команді 1 і зовсім інше в команді 2.
Урі Еррера

ей, ти змінив 1-ю команду? де редагування: X
Rinzwind

Я змінив перший коментар, тому що він містив неінформативні речі. Я хотів би показати приклади, які є максимально відносними. Я зробив коментар до редагування у відповідному розділі для цього. Дякую за -c -D речі, я розумію. Я оновив питання.
Exeleration-G

Відповіді:


14

Див. Розділ Довідкове керівництво Bash під назвою « Операція з оболонками» та « Розширений посібник із написання сценарію» Глава 3 (Спеціальні символи) .

Я посилаюся на тих, коли мені потрібно дізнатися щось нове про сценарії оболонки в ubuntu / linux.

Я думаю, що ви знайдете АБС-розділ 3 найпростішим у навігації для своїх цілей. Усі символи відображаються в лівій крайній частині сторінки з описом безпосередньо під ними.


Розширений посібник з написання сценарію Bash - Глава 3 чудова. Дякую.
Exeleration-G

Перелік у розділі 3 вдосконаленого керування сценарієм баштів є неповним та частково неправильним. Посібник з розширеного сценарію Bash - це не гарний ресурс для вивчення баш. Дивіться замість mywiki.wooledge.org/BashGuide та mywiki.wooledge.org/BashFAQ .
geirha

@geirha Я виявив, що ABS дуже корисний, але для символів у певній команді я хотів би замість цього переглядати підручні сторінки, і ваші посилання теж чудові - закладки. Дякую.
SaultDon

7

На жаль, вам доведеться перейти на сторінки чоловіків, оскільки "символи" можуть мати різний зміст залежно від того, яка команда їх читає.

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

Щодо другої складної команди, це здебільшого лунаючі речі, тому ви знайдете більшу кількість інформації про це на сторінці man's bash.

Щоб відповісти на ваш коментар до цього, символи переадресації> <| використовуються для передачі файлів з файлів у файли (більші та менші за знаки) та для підключення виводу команди з введенням іншого (труба |). Дивіться тут хороший підручник з перенаправлення вводу / виводу, це дуже потужна конструктивна особливість оболонки та набору інструментів Unix.


Добре, а що >? Це знак, який я також часто бачу, я думав, що це означає «копіювати» чи щось таке. Чи залежить також ця команда?
Виконання-G


3

Перший шукає файли, що закінчуються .cв каталозі ~/та executes sed(редакторі упорядкування), де sed sвидобуває cybernetnewsта змінює їх cybernet.

2-ий ухиляється від мене ... показує порожній результат при виконанні.


Це дуже ймовірно можливо, тому що це взяте з іншого питання тут. Без контексту, мабуть, нічого не виходить.
Exeleration-G

2

Найкращий ресурс, який я знайшов для вивчення команд терміналів, - LinuxCommand , він дає докладні описи найбільш використовуваних доступних команд.


неправильне посилання, оновіть або видаліть.
flyingdrifter

2

Важко сказати вам повне значення символів, коли ви вставляєте складні команди.

Відлуння зокрема.

Побачте, що людина відлунює -e, це дозволяє втекти, тому пізніші \ e - це втеча.

Більшість інших символів - це струнні маніпуляції.

Отже, уявіть, у вас є змінна, i яка містить рядок "foo"

i=foo;echo $i
foo

Але це стає складніше, якщо ваша змінна $ i також є частиною рядка

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Тепер ви можете також маніпулювати рядками, друкувати лише частину

У вашому випадку

$ {i # * =} = надрукувати $ i, викресліть найкоротший збіг між * і =, але * сам по собі є підстановкою.

echo ${i#o}
foo

echo ${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} буде порожнім рядком. && == логічні та || є логічним або

тест {порожній рядок} І відлуння порожнього рядка або відлуння x

Вам потрібно було б надати більше синтаксису, але, здається, цей відгомін простежує його десь.

Знову [] - це випробування, і ми уникнули [на самому початку.

Тож я можу лише пояснити стільки того, що робить відлуння.

Причина, коли під час введення команди echo в термінал немає виводу - це фрагмент коду, за замовчуванням не визначено ні x, ні, тому весь вихід порожній.


1

Що стосується питань щодо символів на певних мовах, ви можете спробувати SymbolHound. Ви можете шукати в Інтернеті символи, які Google не знаходить.

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