が、私は文字列の最後の文字が、現時点では/
文字列の最後の文字をbashで確認する方法はありますか?
x="test.com/"
if [[ $x =~ //$/ ]] ; then
x=$x"extention"
else
x=$x"/extention"
fi
であることを確認する必要があり、虚偽は常に起動します。このよう
が、私は文字列の最後の文字が、現時点では/
文字列の最後の文字をbashで確認する方法はありますか?
x="test.com/"
if [[ $x =~ //$/ ]] ; then
x=$x"extention"
else
x=$x"/extention"
fi
であることを確認する必要があり、虚偽は常に起動します。このよう
は、例えば:
$ x="test.com/"
$ [[ "$x" == */ ]] && echo "yes"
yes
$ x="test.com"
$ [[ "$x" == */ ]] && echo "yes"
$
$ x="test.c/om"
$ [[ "$x" == */ ]] && echo "yes"
$
$ x="test.c/om/"
$ [[ "$x" == */ ]] && echo "yes"
yes
$ x="test.c//om/"
$ [[ "$x" == */ ]] && echo "yes"
yes
あなたの条件はわずか間違っていました。 =~
を使用している場合、rhsはパターンと見なされるため、pattern
であり、/pattern/
ではありません。
あなたは
if [[ $x =~ /$ ]] ; then
代わりの
if [[ $x =~ //$/ ]] ; then
あなたはbashで、インデックスの文字列の文字列の長さを得るために${var:index}
と${#var}
を使用することができますを言っている場合は、期待どおりの結果を持っていると思います。 length
#x
はオプションです -
if [[ "${x:${#x}-1}" == "/" ]]; then
# last character of x is/
fi
負のインデックスは許されますが、部分文字列展開とデフォルト値展開を区別するスペースが必要です: '$ {x:-1}'。実際に負のインデックスではなく、計算された正のインデックスを使用しています。 – chepner
あなたは一般的にbashのサブストリングを使用してこれを行うことができます$(string:offset:length}
:負のインデックスは-1
は、最後の文字のインデックスであるので、文字列の先頭から末尾からの移動を意味し、 xの長さしたがって
$n = 1 # 1 character
last_char = ${x:${#x} - $n}
サブストリング拡張将来の参照の場合、
$ man bash
は、すべての魔法
$ {::オフセット長パラメータ}を持っています。 offsetによって指定された文字から始まるパラメータ の最大長文字に展開されます。 lengthが の場合は、offsetで指定された 文字から始まるパラメータの部分文字列に展開されます。長さとオフセットは算術式 ...
素晴らしいです。星は何を表していますか? xに複数の '/'があると、これは誤検出になりますか? –
@MildFuzzアスタリスク '*'は「任意の文字」を示します。したがって、 '[[" $ x "== * m /]] && echo" yes "'を実行することもできます。この場合は 'x =" test.comp/"ではなく" yes "と答えます。 '/'が複数ある場合は、更新された例を確認してください。 – fedorqui