Относительно цикла for в KornShell - PullRequest
2 голосов
/ 30 марта 2011

Есть ли способ реализовать следующее с помощью 'for' в KornShell (ksh)? Вот эквивалент C:

for(i=1;i<20;i++)
{
    printf("%d",i);
}

Мне было интересно, можно ли это реализовать, используя просто 'for', а не 'while'

Я попробовал следующее, похоже, не работает.

for i in [1-20]
    do

    print $i
    done

Пожалуйста, дайте мне знать ваши идеи и решения.

Ответы [ 4 ]

6 голосов
/ 03 апреля 2011

Не совсем ответ, но, к вашему сведению, случайный пользователь ksh.

Редактировать 2019-05-12 (Незначительные правки ниже полужирный , другая информациясейчас поражен ).

Чтобы пояснить несколько комментариев здесь, в типовых установках поставщика доступно 2 ksh (не Linux (может быть, их тоже?)).

В Solaris и AIX есть ksh и ksh93 (вероятно, также для других поставщиков).База ksh также известна как ksh88.Ksh93 описан в Новый язык команд и программирования Kornshell, 1995

Системы Linux, которые имеют настоящий ksh (не pdksh), в основном используют ksh93, называемый ksh.

Наконец, чтобы еще больше сбить с толку, не позволяйте, чтобы дата паба 1995 года обманула вас, ksh продолжается под , находился под активной разработкой Дэвида Корна и Глена Фаулера в AT & T до 2012 года ?. Версии выпускались в 2-3 раза в год.Некоторые версии Linux используют более новые версии.

Эти новые версии имеют очень продвинутые функции (большинство из них взято со страницы UWIN исследования AT & T . Найдите ссылку «Примечания и изменения» (неработающая ссылка))

  • составные переменные, составленные как c-структуры (без c-типов данных, просто наборы decls) (один пользователь запрашивает 500-мегабайтную структуру в памяти)
  • арифметика с плавающей запятой двойной точности с полным C99арифметика .. Числа Inf и NaN могут использоваться в арифметических выражениях.
  • Завершение TAB-TAB генерирует нумерованный список завершений ...
  • Поддержка обработки / обработки многобайтовых локалей (например,en_US.UTF-8, hi_IN.UTF-8, ja_JP.eucJP, zh_CN.GB18030, zh_TW.BIG5 и т. д.) ...
  • / dev / (tcp | udp | sctp) / host / sevrice сейчасобрабатывает адреса IPv6 ...
  • ... поиск файла по смещению или содержимому с новыми операторами перенаправления.
  • Новая опция --showme, которая позволяет частям сценария вести себя так, как если бы-x были указаны, в то время как другие части выполняются как обычно....
  • Добавлен оператор [[...]] = ~, который сравнивает строку с расширенным регулярным выражением ....
  • Встроенная функция printf (1) быларасширен для поддержки флага = для центрирования поля ... (и других) ...
  • view-pathing
  • "Большинство утилит были разработаны AT & T и соответствуют POSIX.2и X / Open. "

(обратите внимание, что ... в приведенном выше тексте обычно указывают на удаление некоторой уточняющей информации)

Корн и Фаулер также произвели продвинутая среда UWIN (Unix для Windows) для людей, использующих такие системы, как Mingw или Cygwin, которая заслуживает отдельного поста.Недостатком UWIN является то, что

  • не тот набор утилит, который вы найдете в вашем любимом Linux.
  • Другая среда компиляции файлов, в которой в значительной степени используется MS Visual C (говорят, что поддержка gcc через Mingw уже в пути),
  • очень небольшое сообщество поддержки,
  • Общая публичная лицензия AT & T V 1.0 Общественная лицензия Eclipse * не является GNU.

См. UW на главной странице (неработающая ссылка): к сожалению, устарела, лучше воспользоваться ссылкой dnld выше.Хм, это намного лучше Часто задаваемые вопросы Гленна Фаулера для UWin (тоже мертв, Машина времени кто-нибудь?).

Надеюсь, это поможет!

Редактировать 2019-05-12 .Причина мертвых ссылок? Дэвид Корн и Глен Фаулер уволены (в AT & T, 2012?

Позже появилась информация о том, что они работают в Google. Я не могу это подтвердить, поэтому считаю это старым слухом.

И см. Ksh93 мертв?

Кажется, что на сайте ast git-hub . ast естьпакет с широкими возможностями, включающий ksh93. Вы можете получить свежий исходный код и скомпилировать его.


Вот текст описания проекта (значительно больше информации вREADME.md).

KSH93

Этот репозиторий содержит инструментарий AT & T Software Technology (AST) от AT & T Research. По состоянию на ноябрь 2017 года основное внимание уделялось развитию перешел на команду ksh (или ksh93) и поддерживающий код, необходимый для построить его.

Не-ksh код проекта AST больше не активно поддерживается. Если вас интересует код не-ksh, смотрите ниже сведения о том, какие ветви содержат полную кодовую базу AST.

Проект поддерживает только системы, в которых компилятор и базовый аппаратное обеспечение совместимо с ASCII. Это включает в себя Linux на IBM zSeries, но не z / OS. Зарождающаяся, неполная, поддержка EBCDIC была удален. Смотрите выпуск № 742.

* EPL заменил оригинальный CPL AT & T.

5 голосов
/ 03 апреля 2011

ksh93 поддерживает C-like (( ...;...; ...)):

for ((i=1;i<20;i+=1)); do
    printf "%d " $i
done && print

Это даст:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1819

Черт, даже старый синтаксис (с использованием '{' ... '}' вместо 'do ... done' будет работать):

for((i=1;i<20;i+=1))
{
   printf "%d " $i
} && print

В старых оболочкахвы все еще можете получить тот же эффект с

i=1 && while ((i<20)); do
    printf "%d " $i
    ((i+=1))
done && print
5 голосов
/ 30 марта 2011

К сожалению, похоже, что ksh не поддерживает расширение на основе диапазона или не поддерживает конструкцию (( )), поэтому для компактного выполнения вам нужно будет вызвать внешний двоичный файл seq следующим образом:

for i in $(seq 1 20); do
  echo $i
done
1 голос
/ 27 апреля 2013

ksh93 предлагает расширение brace, даже если «braceexpand» включено.Проверьте с помощью "set -o", а затем используйте фигурные скобки {}

for i in {1..20}
do
  print $i
done
...