для диапазона петель не работает ksh - PullRequest
3 голосов
/ 09 июня 2010

Я пробовал это,

#!/bin/ksh
for i in {1..10}
do
  echo "Welcome $i times"
done

в кш коробки AIX. Я получаю вывод как,

Добро пожаловать {1..10} раз

Что здесь не так? Разве не предполагается печатать от 1 до 10? Редактировать: Согласно сообщению Перколатора, от Итерации по диапазону целых чисел в ksh?

Работает только на Linux. Есть ли какие-либо другие способы обхода / замены unix box ksh?

for i in 1 2 3 4 5 6 7 8 9 10

ужасен.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 09 июня 2010

Я думаю по памяти, что стандарт ksh в AIX - более старый вариант. Может не поддерживать дальний цикл. Попробуйте запустить его с ksh93 вместо ksh. Это должно быть в том же месте, что и ksh, вероятно /usr/bin.

В противном случае, просто используйте что-то старое, например:

i=1
while [[ $i -le 10 ]] ; do
    echo "Welcome $i times"
    i=$(expr $i + 1)
done

На самом деле, просмотр publib , кажется, подтверждает это (фрагмент ksh93), поэтому я попытался бы пойти по этому маршруту.

0 голосов
/ 23 сентября 2011

Вы можете проверить и посмотреть, работает ли jot см. Справочную страницу здесь или, если нет, напишите свою маленькую программу на C, чтобы сделать то же самое, и назовите ее.

Синтаксис для jot:что-то вроде

for i in `jot 1 10`
do 
    //do stuff here
done
0 голосов
/ 09 июня 2010

Кажется, что у версии ksh нет оператора диапазона. Я видел это в нескольких системах.

Вы можете обойти это с помощью цикла while:

while [[ $i -lt 10 ]] ; do
    echo "Welcome $i times"
   (( i += 1 ))
done

В моих системах я обычно использую Perl, поэтому скрипт будет выглядеть как

#!/usr/bin/perl
for $i (1 .. 10) {
    echo "Welcome $i times"
}
0 голосов
/ 09 июня 2010

Причина в том, что до 93 ksh фактически не поддерживает диапазон.

Когда вы запустите его в Linux, вы обнаружите, что ksh - это ссылка на bash или ksh93.

Попробуйте цикл как: -

for ((i=0;i<10;i++))
do
 echo "Welcome $i time"
done
...