2014-01-16 5 views
1

У меня есть сценарий KornShell (ksh). Он печатает только a и b. Я не уверен, почему он печатает только эти две буквы?Неисправный сценарий Unix Shell

сценарий:

#!/bin/ksh 
for i in [global] 
do 
     echo $i 
done 
exit 0 

выход:

./a.sh 
a 
b 

мне нужно понять, как оболочки интерпретации [глобальное] слово.

+1

Где [глобальный] определяется? Когда я запускаю, когда вы ввели его, выходы [global] –

+0

Я ожидаю печати [global], это просто строка – sfgroups

+0

Вот что я вижу, когда я запускаю ее. Какую версию ОС/оболочки вы используете? –

ответ

3

Поскольку строка [global] обрабатывается оболочкой как шаблон глобуса и пытается сопоставить любые файлы в текущем каталоге, которые имеют односимвольное имя из набора символов {a, b, g, l, o}. У вас есть два файла в этом каталоге: a и b соответственно. Если вы хотите [global] следует рассматривать как строку, а затем добавить некоторые цитаты:

for i in "[global]" 
do 
    echo "$i" 
done 

Цитирование предотвращает подстановку.

+2

В какой версии ksh и ОС вы это заметили? Я выполнил то, что он ввел, и получил [global] в качестве вывода .... @sfgroups у вас есть файлы с именами a и b в текущем каталоге? –

+1

@JamesGawron Если glob ничего не соответствует, он остается как-есть, поэтому, если у вас нет файла с именем 'a',' b', 'g',' l' или 'o',' echo [global] 'фактически напечатает строку' [global] '. Однако, если вы это сделаете, шаблон будет заменен списком соответствующих файлов. Это находится в 'bash', но globbing (по крайней мере, эта конкретная форма) работает примерно так же в' ksh', 'csh' (shudder),' zsh' и т. Д. Вы можете проверить это: 'mkdir x ; cd x; echo [global]; коснитесь a; echo [global] ' – twalberg

+0

Проверено ... Я часто задаюсь вопросом о SOF, где в мире люди сталкиваются с этими деталями, поскольку я не видел, чтобы это было зафиксировано в моих путешествиях (: ^) –

0

Этот скрипт ksh отлично работает в Cygwin с версией ksh: MIRBSD KSH R48 2013/08/16.

Ksh Script

#!/bin/ksh 
for i in [global] 
do 
    echo ${i} 
done 
exit 0 

Выход Ksh сценария:

[email protected]:/tmp $ ksh so7.ksh 
ksh so7.ksh 
[global] 
[email protected]:/tmp $ echo $KSH_VERSION 
echo $KSH_VERSION 
@(#)MIRBSD KSH R48 2013/08/16 
[email protected]:/tmp $ sh so7.ksh 
sh so7.ksh 
[global] 
+0

@ avaPlease42 проблема проблема У меня был файл a и b в этом каталоге. коснитесь b, затем запустите скрипт, в котором будет указан a & b – sfgroups