2012-11-09 244 views
0

我編寫了下面的shell腳本。Shell腳本測試命令

#! /bin/sh 

foo=asdfqwer/asdfxv 

if [ $foo = */* ] 
then 
    echo bad 
else 
    echo good 
fi 

在測試命令,我們可以比較兩個字符串和模式就是這樣,

[ string = pattern ] 

[ string == pattern ] 

然而,上面的腳本總是打印「好」在終端,也有如下錯誤:

[ : asdfqwer/asdfxv : unexpected operator 

有人能告訴我爲什麼以及如何比較shell腳本中的stirng和模式嗎?

回答

1

test命令(或[命令),不執行匹配替換的比較。相反,shell正在擴展*/*以匹配目錄中的文件,並將其替換爲該命令。據推測,其中一個文件名被解析爲[命令的操作符,並且無效。

進行比較的水珠,最好的辦法是case

#!/bin/sh 

foo=asdfqwer/asdfxv 

case "$foo" in 
    */*) echo bad ;; 
    *) echo good ;; 
esac 
+0

非常有幫助。謝謝 – eleven