JavaScriptにはこれを達成する機能があります。
'world'.startsWith('w')
true
シェルを使用してこれをどのようにテストできますか?私はこのコードを持っています:
if [ world = w ]
then
echo true
else
echo false
fi
しかし、平等をテストするので失敗します。私は組み込み機能を使用することを好みますが、このページのすべてのユーティリティを使用できます。
http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
答え1
シェルがbashの場合:二重括弧内の==演算子の右側は、完全に引用されない限りパターンです。
if [[ world == w* ]]; then
echo true
else
echo false
fi
またはより簡潔に: [[ world == w* ]] && echo true || echo false
[*]
bashを特別にターゲティングしない場合:パターンマッチングのためのケース説明の使用
case "world" in
w*) echo true ;;
*) echo false ;;
esac
[*]しかし、フォームに注意する必要がありA && B || C
ますC
。誰でも失敗したまたはBは失敗しました。このif A; then B; else C; fi
フォームはただAが失敗した場合はCを実行します。
答え2
$str
変数を次の値に設定します(ここではに設定しますworld
)。
str=world
それから:
if [ -n "${str%%w*}" ]
then
echo false
else
echo true
fi
w*
の始めからパターンを積極的に削除します$str
。w*
一致w
の後ろには任意の数の文字があるので、可能であれば文字列全体と一致します。- 残りがある場合は
$str
開始しないでくださいw
。
または:
if [ "$str" = "${str#w}" ]
then
echo false
else
echo true
fi
w
可能であれば削除してください$str
。- それと比較してみてください
$str
。 - 同じ場合(つまり、削除は何もしません)
$str
から始めませんw
。
答え3
sh
標準構文はcase
次の構文です。
string=world
start=w
case $string in
("$start"*) printf '%s\n' "$string starts with $start";;
(*) printf '%s\n' "$string does not start with $start";;
esac
ワイルドカードが含まれている場合は引用符が$start
必要です。$start
たとえば、start='*'
含めるかどうかに関係なく$start*
常に一致します。[[ $string = "$start"* ]]
ksh/bashも同様です。