我有這個KornShell(ksh)腳本。它只打印a
和b
。我不確定爲什麼只印刷這兩個字母?Unix Shell腳本的非預期輸出
腳本:
#!/bin/ksh
for i in [global]
do
echo $i
done
exit 0
輸出:
./a.sh
a
b
我需要了解如何解釋外殼[全球]字。
我有這個KornShell(ksh)腳本。它只打印a
和b
。我不確定爲什麼只印刷這兩個字母?Unix Shell腳本的非預期輸出
腳本:
#!/bin/ksh
for i in [global]
do
echo $i
done
exit 0
輸出:
./a.sh
a
b
我需要了解如何解釋外殼[全球]字。
由於字符串[global]
被shell視爲一個glob模式,並嘗試匹配當前目錄中來自字符集{a, b, g, l, o}
的單字符名稱的任何文件。您在該目錄中有兩個文件,分別名爲a
和b
。如果你想[global]
被視爲一個字符串,然後添加一些報價:
for i in "[global]"
do
echo "$i"
done
引用防止通配符。
你在什麼版本的ksh和OS下觀察過這個?我已經完全運行了他所輸入的內容,並且收到了[global]作爲輸出.... @sfgroups是否有當前目錄中名爲a和b的文件? –
@JamesGawron如果glob不匹配任何東西,它保持不變,所以如果你沒有一個名爲'a','b','g','l'或'o','echo'的文件[global]'實際上會打印字符串'[global]'。但是,如果你這樣做,模式將被替換爲匹配文件列表。這是'bash',但globbing(至少那個特殊的形式)在'ksh','csh'(shudder),'zsh'等中的工作方式幾乎相同......你可以驗證這個:'mkdir x ; cd x; echo [global];摸一下; echo [global]' – twalberg
已驗證...我經常想到SOF在世界各地的人們遇到這些細節,因爲我沒有看到記錄在我的旅行中的任何地方(:^) –
這個ksh腳本在Cygwin中使用ksh版本很好: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]
@ avaPlease42問題我有文件a和b在該目錄。觸摸一個b,然後運行它將列出a&b的腳本 – sfgroups
在哪裏[全球]定義的?當我輸入它時輸出[全球] –
我期望打印[全球],它只是字符串 – sfgroups
這就是我看到,當我運行它。你在運行什麼OS/Shell版本? –