0

次のように-gtまたは==エラーが発生し続けるようです。誰かが助けることができますか?

flag= echo $flightSeatBooked | awk -F[,] '{print match($flightSeatBooked, $orderSeats)}'
if $flag == 0; then
        echo "Success";
else
        echo "fail";

与えられた:

flightSeatBooked= 9;,A1,A2,A3,A4,B2,E4,C3,B3,D3,D2,E1,E2,C2,B4,C4,D4,C1,D1,E3,B1
orderSeats= B2 (not found in the variable)

期待される出力:成功

4

3 に答える 3

1

かなりの数の間違い。次のように変更します。

flag=$(echo $flightSeatBooked | awk -v flseat=$flightSeatBooked -v orseat=$orderSeats '{print match(flseat, orseat)}')

if [ $flag -eq 0 ]; then
        echo "Success";
else
        echo "fail";
fi
  1. コマンド置換は、$(...)表記を使用して行われました。
  2. シェル変数をawkで直接使用することはお勧めできません。したがって、-vを使用してシェル変数をawkに渡します。
  3. if usedの構文が正しくないため、修正するように更新されました。
于 2012-11-23T11:02:51.560 に答える
1

これはあなたが求めることをする方法です:

flag=$(awk -v flseat="$flightSeatBooked" -v orseat="$orderSeats" 'BEGIN{print index(flseat, orseat)}')

if [ $flag -eq 0 ]; then
        echo "Success"
else
        echo "fail"
fi

しかし、私はあなたが尋ねることは良い考えではないと思います。少なくとも次のようなものにする必要があります。

awk -v flseat="$flightSeatBooked" -v orseat="$orderSeats" 'BEGIN{exit index(flseat, orseat)}')

if [ $? -eq 0 ]; then
        echo "Success"
else
        echo "fail"
fi

そして、おそらく本当に必要なのは、次のようなものだけです。

case "$flightSeatBooked" in
   *"$orderSeats"* ) echo "fail";;
   * ) echo "Success" ;;
esac

ロジックを確認してください(私はまだ行っていません!)が、うまくいけば、アプローチを得ることができます。

于 2012-11-23T20:24:51.457 に答える
0

以下でこれを使用して、$orderSeatsが$flightSeatBookedにあるかどうかを確認することもできます。にある場合は、一致した文字列の長さを返すか、0が返されます。

expr "$flightSeatBooked" : ".*,${orderSeats},"
于 2012-11-23T11:42:10.427 に答える