Я запутался из-за роли, которую играет разделение слов zsh
. Я не сталкивался с этой концепцией при программировании на C, Python или MATLAB, и это вызвало у меня интерес к тому, почему расщепление слов кажется чем-то специфичным для программирования оболочки.
Я читал о разделении слов на этом и других сайтах ранее, но не нашел четкого объяснения концепции. В Википедии есть определение разделения слов, но, похоже, нет ссылок на то, как оно применяется к оболочкам Unix.
Вот пример моей путаницы в zsh
:
В FAQ по Z Shell я прочитал следующее:
3.1: Почему ,
$var
когдаvar="foo bar"
не делать то , что я могу рассчитывать?В большинстве производных от Bourne-shell переменные, состоящие из нескольких слов, например
var="foo bar"
, разделяются на слова, когда передаются команде или используются вfor foo in $var
цикле. По умолчанию у zsh такого поведения нет: переменная остается нетронутой. (Это не ошибка! См. Ниже.) ОпцияSH_WORD_SPLIT
существует для обеспечения совместимости.
Однако в Руководстве по Z Shell я прочитал следующее:
SH_WORD_SPLIT (-y) <K> <S>
Вызывает разделение полей при раскрытии параметров без кавычек. Обратите внимание, что эта опция не имеет ничего общего с разделением слов. (См. Расширение параметров.)
Почему говорится, что SH_WORD_SPLIT
это не имеет ничего общего с разделением слов? Разве слово не разделяет именно то, что это все?
"word1 word2 word3"
в списки / массивы формы"word1" "word2" "word3"
? Я также обновил ОП с конкретным источником путаницы в Zsh.