2013-10-09 4 views

答えて

8

は、例えば:

$ 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 
+0

素晴らしいです。星は何を表していますか? xに複数の '/'があると、これは誤検出になりますか? –

+0

@MildFuzzアスタリスク '*'は「任意の文字」を示します。したがって、 '[[" $ x "== * m /]] && echo" yes "'を実行することもできます。この場合は 'x =" test.comp/"ではなく" yes "と答えます。 '/'が複数ある場合は、更新された例を確認してください。 – fedorqui

3

あなたの条件はわずか間違っていました。 =~を使用している場合、rhsはパターンと見なされるため、patternであり、/pattern/ではありません。

あなたは

if [[ $x =~ /$ ]] ; then 

代わりの

if [[ $x =~ //$/ ]] ; then 
3

あなたはbashで、インデックスの文字列の文字列の長さを得るために${var:index}${#var}を使用することができますを言っている場合は、期待どおりの結果を持っていると思います。 length

#xはオプションです -

if [[ "${x:${#x}-1}" == "/" ]]; then 
    # last character of x is/
fi 
+0

負のインデックスは許されますが、部分文字列展開とデフォルト値展開を区別するスペースが必要です: '$ {x:-1}'。実際に負のインデックスではなく、計算された正のインデックスを使用しています。 – chepner

0

あなたは一般的にbashのサブストリングを使用してこれを行うことができます$(string:offset:length}:負のインデックスは-1は、最後の文字のインデックスであるので、文字列の先頭から末尾からの移動を意味し、 xの長さしたがって

$n = 1  # 1 character 
last_char = ${x:${#x} - $n} 

サブストリング拡張将来の参照の場合、

$ man bash 

は、すべての魔法

$ {::オフセット長パラメータ}を持っています。 offsetによって指定された文字から始まるパラメータ の最大長文字に展開されます。 lengthが の場合は、offsetで指定された 文字から始まるパラメータの部分文字列に展開されます。長さとオフセットは算術式 ...

関連する問題