Существует http://apsstandard.org/, но это только для веб-приложений и не позволяет запрашивать в восходящем направлении непосредственно. Это мало чем отличается от Debian (или некоторый другой дистрибутив) репозиторий в том отношении.
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
.
Есть один случай, когда он может быть полезным не использовать пробелы.
Если вы не используете американо-американский макет, вы можете быть вынуждены использовать некоторые комбинации, такие как 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: Команда не найдена: хвост
Единственное значение пространств в этом случае имеет эстетика.
Или, другими словами, полезны для того, чтобы сделать команды более читаемыми для человека.
Трубы Позвольте вам использовать вывод программы в качестве входа другого ...
настолько пробелы, его просто вопрос читабельности / персонала предпочтения, как упомянул @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