shシェルを使用したCaseステートメントのワイルドカード文字列の一致

shシェルを使用したCaseステートメントのワイルドカード文字列の一致

シェルでワイルドカード文字列を一致させるのに問題がありますsh。このコードはシェルの一部なので、configure.ac一般的に利用可能な最も弱いシェルを取得します。 Bashシェルを信じられない。

コードが最初に実行されます。

LDNAME=`basename "$LD"`

ld -m x86_64時には、または同じ文字列が表示されますが、フレンドリーな表示名としてld -m elf64lppc使用したいと思います。ld

それから私はシェルスクリプトbashで部分文字列を確認するには?シェルスクリプトにおけるIF条件の部分文字列の検査そしてif/elseとワイルドカードの比較使用case説明:

case "$LDNAME" in
    "ld -m*") LDNAME=ld
    ;;
esac

文字列が一致できず、元の文字列を再取得します。私はまたld -m *(引用符なしで)同じ結果の別の変形を試みました。

shCaseステートメントでワイルドカード文字列を一致させるためにシェルを使用する方法は?


これは機能しますが、拡張はうまくいきません。

if test "$LDNAME" = "ld -m elf_x86_64"; then
   LDNAME=ld
fi
if test "$LDNAME" = "ld -m elf64lppc"; then
   LDNAME=ld
fi

ベストアンサー1

これは働きます:

LDNAME="ld -m blah"
case "$LDNAME" in "ld -m"*) echo foo;; esac

ワイルドカードは引用符なしでそのままにしてください*。それ以外の場合はリテラル文字として扱われます。

ただし、実際にそれ以降の内容を削除するには-m使用できますLDNAME=${LDNAME%% -m*}

LDNAME="ld -m blah"
LDNAME=${LDNAME%% -m*}
echo ":$LDNAME:"

与えられた:ld:

おすすめ記事