2014-01-16 3 views
1

이 KornShell (ksh) 스크립트가 있습니다. ab 만 인쇄합니다. 왜이 두 글자 만 인쇄하는지 모르겠습니다.Unix 쉘 스크립트 예상대로 출력되지 않음

스크립트

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

출력 : 내가 어떻게 쉘 해석 [글로벌] 단어를 이해하는 데 필요한

./a.sh 
a 
b 

.

+1

을 정의? 내가 입력했을 때 실행하면 [global] –

+0

을 출력합니다. [global]을 인쇄 할 예정입니다. 문자열은 – sfgroups

+0

입니다. 실행하면 보입니다. 어떤 OS/쉘 버전을 실행하고 있습니까? –

답변

3

[global] 문자열은 덩어리 패턴으로 셸에서 처리되므로 문자 집합 {a, b, g, l, o}의 단일 문자 이름이있는 현재 디렉토리의 모든 파일을 찾습니다. 해당 디렉토리에 ab이라는 두 개의 파일이 있습니다. 당신이 [global] 문자열로 취급 할 경우, 어떤 따옴표를 추가 : 글 로빙

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

인용 방지합니다.

+2

ksh 및 OS의 어떤 버전에서 이것을 관찰 했습니까? 나는 그가 입력 한 것과 정확히 일치하는 것을 실행했고, 출력으로 [global]을 받았습니다 .... @sfgroups 현재 디렉토리에 a와 b라는 파일이 있습니까? –

+1

@JamesGawron glob가 어떤 것과도 일치하지 않으면 그대로 남기 때문에'a','b','g','l' 또는'o'라는 파일이 없다면'echo [global]'실제로'[global]'문자열을 출력합니다. 그래도 패턴이 일치하는 파일 목록으로 바뀝니다. 이것은'bash'에 있지만 globbing (최소한 특정 형식)은'ksh','csh' (떨림),'zsh' 등에서 거의 같은 방식으로 작동합니다. 이것을 검증 할 수 있습니다 :'mkdir x ; cd x; echo [global]; 터치; echo [global]' – twalberg

+0

확인 ... 저는 종종 세계 여행자들이 어디서나이 세부 정보를 볼 수 있는지 궁금합니다. (: ^) –

0

이 ksh 스크립트는 ksh 버전의 Cygwin에서 잘 작동합니다. MIRBSD KSH R48 2013/08/16.

은 Ksh 스크립트

#!/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 내가 그 dir에 파일 a와 b를 가지고있는 문제. a b를 터치 한 다음 스크립트를 실행하여 a & b를 나열합니다. – sfgroups

관련 문제