0

2 つのコマンドの結果に応じて、ash で条件を作成する必要があります。問題は、そのうちの 1 つは結果を stdout に返し、もう 1 つは終了コードとして返すことです。

書く必要がありますか

 command2
 RET=$?
 if [ `command1` -eq 1 -a $RET -eq 2 ] ; then ...

command2または、のロジック内の戻りコードに簡単にアクセスできる構造はあり[ ]ますか?

 if [ `command1` -eq 1 -a ${{{ command2 }}} -eq 2 ] ; then ...

${{{ }}}}リターンコードを抽出する魔法の表現ですか?)

4

2 に答える 2

1

次のように書く方がよいでしょう:

if [ "`command1`" -eq 1 ] && command2
then
  ....
fi

または、終了コードが 2 かどうかを確認する場合は、次のようにします。

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; }
then
  ....
fi

例:

$ cat 1.sh
ARG="$1"

command1()
{
  echo 1
}
command2()
{
  return "$ARG"
}

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; }
then
  echo OK
else
  echo FAILED
fi

$ sh 1.sh 2
OK
$ sh 1.sh 3
FAILED
于 2012-06-27T10:09:52.027 に答える
0

$? を回避する方法はないと思いますが;echo $?、最後に追加することで、テスト ステートメント内でコマンドを使用できます。

if [ `command1` -eq 1 -a `command2 ; echo $?` -eq 2 ] ; then ...
于 2012-06-27T15:01:35.073 に答える