Пробелы рядом с каналами

Существует http://apsstandard.org/, но это только для веб-приложений и не позволяет запрашивать в восходящем направлении непосредственно. Это мало чем отличается от Debian (или некоторый другой дистрибутив) репозиторий в том отношении.

17
02.03.2015, 02:34
4 ответа

bash определяет несколько метасимволов . Из man bash :

метасимвол
Символ, который без кавычек разделяет слова. Одно из следующих:
| &; () <> space tab

Поскольку метасимволы разделяют слова, не имеет значения, окружены ли они пробелами. Символ вертикальной черты | - это метасимвол, поэтому, как вы заметили, пробелы вокруг него не нужны.

Обратите внимание, что [, ] , {, } и = не являются метасимволы. Их значение, напротив, сильно зависит от того, окружены ли они пробелами.

Примеры того, когда пробелы нужны и не нужны

Как вы заметили, не имеет значения, окружено ли | пробелами. Давайте рассмотрим несколько примеров, которые часто сбивают с толку пользователей bash. Примите во внимание:

$ (date)
Sun Mar  1 12:47:07 PST 2015

Вышеупомянутые скобки принудительно запускают команду date в подоболочке.Поскольку ( и ) являются метасимволами, пробелы не нужны. Для сравнения:

$ {date}
bash: {date}: command not found

Поскольку { и } являются не метасимволами, оболочка обрабатывает {date} как одно слово. Вместо поиска команды date он ищет команду с именем {date} . Поскольку он не находит его, возникает ошибка.

Другой распространенной проблемой является команда test . Следующее работает успешно:

$ [ abc ] && echo Yes
Yes

Удалите пробелы, и возникает ошибка:

$ [abc] && echo Yes
bash: [abc]: command not found

Поскольку [ и ] являются не метасимволами, оболочка обрабатывает ] [.bashrc] как одно слово, и результат, как и в примере date , является ошибкой.

Операторы присваивания также чувствительны к пробелам. Следующее присвоение выполнено успешно:

$ v=date
$ echo $v
date

Добавить пробел, и присвоение не выполняется:

$ v= date
Sun Mar  1 12:55:05 PST 2015

В приведенном выше примере оболочка временно устанавливает v как пустое, а затем выполняет команду date .

Добавление пробела перед = также вызывает сбой, но по другой причине:

$ v =date
bash: v: command not found

Здесь оболочка пытается выполнить команду v с аргументом = дата . Ошибка связана с тем, что не обнаружена команда с именем v .

24
27.01.2020, 19:46

Есть один случай, когда он может быть полезным не использовать пробелы. Если вы не используете американо-американский макет, вы можете быть вынуждены использовать некоторые комбинации, такие как ALT Shift L для ввода трубы. Хотя это не проблема SE, одна последствия заключается в том, что иногда вы также вводите непечатанные символы до или после этого символа. Например, на французском MacBook Pro клавиатуры я должен использовать ALT Shift L для ввода | . Когда вы печатаете быстро, вы можете случайно ввести это: ALT Shift ( L , , )

$ sudo dmesg | tail
zsh: command not found:  tail

echo "sudo dmesg | tail" | od -a
0000000    s   u   d   o  sp   d   m   e   s   g  sp   |   �   �   t   a
0000020    i   l  nl

Если вы не знаете, что ALT Shift Пространство входы различного пространства (невыполненное пространство ( U + 00A0 )), следующая ошибка может быть трудно понять: ZSH: Команда не найдена: хвост

2
27.01.2020, 19:46

Единственное значение пространств в этом случае имеет эстетика.
Или, другими словами, полезны для того, чтобы сделать команды более читаемыми для человека.

1
27.01.2020, 19:46

Трубы Позвольте вам использовать вывод программы в качестве входа другого ...

настолько пробелы, его просто вопрос читабельности / персонала предпочтения, как упомянул @jasonwryan Отказ

Один пробел до и после «|» Это норма ....

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

lnydex99uhc:depot_r user$ lsof | grep my | column -t
Microsoft  290  user  txt  REG  1,4  9515016  170972    /Library/Fonts/PCmyoungjo.ttf
bash       359  user  cwd  DIR  1,4  714      12246074  /Users/zatef/hw2/base/active/myapp
3
27.01.2020, 19:46

Теги

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