Для циклов в zsh и ударе

X11Forwarding должен быть установлен на сервере SSH (в Вашем случае поле Ubuntu) в sshd_config, и необходимо позволить X11 быть переданным для клиента SSH (поле Fedora) путем передачи -X опция или редактирование ssh_config файл для добавления ForwardX11 значение по умолчанию.

61
25.10.2011, 02:16
2 ответа

Несколько форм сложных команд, таких как циклы имеют альтернативные формы в zsh. Эти формы главным образом вдохновлены оболочкой C, которая была довольно распространена, когда zsh был молод, но теперь исчез. Эти чередуются, формирует действие точно как нормальные формы, они - просто другой синтаксис. Они немного короче, но менее ясны.

Стандартная форма для for команда for x in 1 2 3; do echo $x; done, и стандартная форма для while команда while test …; do somecommand; done. Ksh, удар и zsh имеют альтернативную форму for: for ((i = 0; i < 42; i++)); do somecommand; done, который подражает for циклы языков как Паскаль или C, для перечисления целых чисел. Другие экзотические формы, которые существуют в zsh, характерны для zsh (но часто вдохновляемый csh).

63
27.01.2020, 19:32
  • 1
    Большое спасибо @Guilles. Я все еще немного смущен все же. К которому форма является определенной zsh? Кроме того, я добавил один пример в конце своего OP, где я не могу выяснить, как перевести между синтаксисами. Если различием является просто синтаксис, как я должен исправить второй сценарий в приложении, чтобы заставить его работать? –  Amelio Vazquez-Reina 25.10.2011, 02:20
  • 2
    @intrpc Видит мой обновленный ответ. Что касается Вашего последнего примера, это не работает, потому что Вы записали for x $d и zsh ожидает также in или ( где Вы записали $d. Знаки пунктуации и зарезервированные слова не могут прибыть из переменного расширения, они должны быть проанализированы, прежде чем оболочка может запуститься на переменных расширениях. –  Gilles 'SO- stop being evil' 25.10.2011, 02:33
  • 3
    @intrpc оба zsh конкретный. zsh был специально предназначен для поддержки и границы, Korn и синтаксиса c-оболочки, поскольку это - гибрид всех трех. –  Tim Kennedy 25.10.2011, 07:25
  • 4
    @pseyfert Это работает, но это не имеет преимущество перед формами, которые я показываю: это менее портативно, чем for (( … )) форма и использование большая память, если 3 является большим. –  Gilles 'SO- stop being evil' 16.01.2016, 01:35

В моем случае у меня есть много файлов шрифтов для исправления (, то есть много .ttfфайлов ), и я хочу напрямую ввести и запустить команду сценария в терминале (, не сохраняя ее в файле сценария):

for x in JetBrainsMonoNL* ; do \
    fontforge -script fontpatcher $x --mono -l -q --fontawesome \
        --octicons --fontlogos --mdi --powerline --powerlineextra; \
done;

Суть в том, что:JetBrainsMonoNL*будет массивом, через который будет проходить цикл, и если он будет записан в первой форме:

for x in (JetBrainsMonoNL*)

скобки кажутся лишними (по крайней мере мне, новичку ), и я думаю, именно поэтому стандарт определен без них.


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

2
02.04.2021, 01:40

Теги

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