2010-06-09 6 views
3

J'ai essayé,boucle gamme ne fonctionne pas ksh

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

dans Ksh d'une boîte AIX. Je reçois la sortie comme,

Bienvenue {1..10} fois

Quel est le problème ici? N'est-il pas supposé imprimer de 1 à 10 ?. Editer: Selon poste de perkolator, de Iterating through a range of ints in ksh?

Il fonctionne uniquement sur Linux. Y at-il un autre travail autour/remplacements pour un box ksh unix?

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

est moche.

Merci.

Répondre

4

je pense de la mémoire que le ksh standard sur AIX est une variante plus ancienne. Il se peut qu'il ne supporte pas la boucle à distance. Essayez de l'exécuter avec ksh93 au lieu de ksh. Cela devrait être au même endroit que ksh, probablement /usr/bin.

Sinon, il suffit d'utiliser quelque chose comme la vieille école:

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

En fait, en regardant à travers publib semble confirmer (l'extrait ksh93) donc je vais essayer d'aller dans cette voie.

+0

Malheureusement, Ksh93 ne semble pas fonctionner pour moi ici. Mais c'est bien sur/usr/bin. – jsg25

+0

Cette vieille chose fonctionne très bien! – jsg25

+1

Puisque les anciennes versions des shells n'ont pas la fonction range, 'seq' est souvent utilisé:' pour i dans $ (seq 10) 'ou' pour i dans \ 'seq 10 \' '(ou sur les systèmes BSD, peut utiliser 'jot'). @paxdiablo: si un shell a '[[]]' il a probablement '$ (())' et vous n'avez pas besoin d'utiliser 'expr'. –

0

La raison en est que le pré-93 ksh ne supporte pas réellement la portée. Lorsque vous l'exécutez sur Linux, vous avez tendance à trouver que ksh est en fait un lien vers bash ou ksh93.

Essayez boucle comme: -

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

Cela ne semble pas fonctionner aussi dans ksh! – jsg25

+0

Confirmant que la boucle for-style C ne fonctionne pas. – Katerberg

+0

ksh93, Bash et zsh tous comprennent C-like pour la syntaxe de boucle. Reportez-vous à http: // stackoverflow.com/questions/1591109/how-it-it-it-through-a-gamme-of-ints-in-ksh – askmish

0

Il semble que la version de ksh que vous avez ne possède pas l'opérateur de plage. J'ai vu cela sur plusieurs systèmes.

vous pouvez contourner ce avec une boucle while:

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

Sur mes systèmes j'utilise généralement perl afin que le script ressemblerait

#!/usr/bin/perl 
for $i (1 .. 10) { 
    echo "Welcome $i times" 
} 
0

Vous pouvez vérifier et voir si jot fonctionne see man page here ou sinon, écrivez votre propre petit programme C pour faire la même chose et appelez ça.

La syntaxe de jot est quelque chose comme

for i in `jot 1 10` 
do 
    //do stuff here 
done 
Questions connexes