シェルでワイルドカード文字列を一致させるのに問題があります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 *
(引用符なしで)同じ結果の別の変形を試みました。
sh
Caseステートメントでワイルドカード文字列を一致させるためにシェルを使用する方法は?
これは機能しますが、拡張はうまくいきません。
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:
。