1

以下のシェルスクリプトを書きます。

#! /bin/sh

foo=asdfqwer/asdfxv

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

テスト コマンドでは、次のように文字列とパターンを比較できます。

[ string = pattern ]

[ string == pattern ]

ただし、上記のスクリプトは常にターミナルに「良い」と出力し、次のようなエラーも発生します。

[ : asdfqwer/asdfxv : unexpected operator

誰かがシェルスクリプトでスターリングとパターンを比較する理由と方法を教えてもらえますか?

4

2 に答える 2

2

testコマンド(またはコマンド)は、[グロブ比較を行いません。代わりに、シェルは*/*ディレクトリ内のファイルと一致するようにを展開し、それらをそのコマンドに置き換えます。おそらく、ファイル名の1つが[コマンドの演算子として解析され、無効になっています。

グロブと比較する最良の方法は次のとおりですcase

#!/bin/sh

foo=asdfqwer/asdfxv

case "$foo" in
   */*) echo bad ;;
   *) echo good ;;
esac
于 2012-11-09T23:52:37.053 に答える
0
if [ "$foo" == "*/*" ]
then
    echo bad
else
    echo good

比較には二重の等号が必要で、文字列の比較には二重引用符が必要なようです。

http://www.tech-recipes.com/rx/209/bournebash-shell-scripts-string-comparison/

于 2012-11-09T23:50:01.620 に答える