0

文字列が特定のプレフィックスで始まるかどうかをテストしようとしています。しかし、私のスクリプトは機能していないようです (「if」ブランチが実行されないことが予想されます)。Bash の専門家が調査を手伝ってくれますか? ありがとう!

ここに私のコードとテスト結果があります:

$ cat testb.bash

#!/bin/bash

my_var="abcdefg";
if [[ "${my_var:0:5}"=="order" ]]; then
    echo "value of my_var is ${my_var}.";
fi;

if [[ "${my_var:0:5}" -eq "order" ]]; then
    echo "value of my_var is ${my_var}.";
fi;

if [ "${my_var:0:5}"="order" ]; then
    echo "value of my_var is ${my_var}.";
fi;

$ bash -x testb.bash

+ my_var=abcdefg
+ [[ -n abcde==order ]]
+ echo 'value of my_var is abcdefg.'            
value of my_var is abcdefg.
+ [[ abcde -eq order ]]
+ echo 'value of my_var is abcdefg.'
value of my_var is abcdefg.
+ '[' abcde=order ']'
+ echo 'value of my_var is abcdefg.'
value of my_var is abcdefg.
$
4

4 に答える 4

2

この場合、空白は重要です。出力からわかる-xように、最初の条件は次のように理解されます。

[[ -n "${my_var:0:5}==order" ]]

さらに、プレフィックスをテストするには、パターンを使用できます。

[[ $my_var == order* ]]
于 2013-10-19T23:10:28.330 に答える
0

プレフィックスをテストする POSIX 準拠の方法は、プレフィックスを削除して、結果を元の文字列と比較することです。2 つが同じ場合、プレフィックスは存在せず、削除は失敗し、式は元の文字列に展開されます。

prefix=foo
string=foobar

if [ "${string#$prefix}" = "$string" ]; then
    printf "$string does not start with $prefix\n"
else
    printf "$string starts with $prefix\n"
fi
于 2013-10-20T15:08:42.800 に答える