「if tty -s」は機能しますが、「if [tty -s]」は機能しないのはなぜですか?

「if tty -s」は機能しますが、「if [tty -s]」は機能しないのはなぜですか?

ちなみに私はkshCentOSを使用して実行しています。

次のようにロガー機能が設定されたシェルスクリプトがあります。

if tty -s
then
  echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
  echo "${FOO}" >> ${BAR_LOG_FILE} 
fi

if私の問題は、コードの他のすべてのテストのように見えるようにリファクタリングすると実行が停止することです。if

なぜ?

私のリファクタリングは次のとおりです。

if [ tty -s ];
then
  echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
  echo "${FOO}" >> ${BAR_LOG_FILE} 
fi

私が変更した唯一の変更は、残りのテストと同様に、周囲に括弧を入れて追加したことifです。すべて期待どおりに動作します。;if

リファクタリング結果がBAR_LOG_FILE見つからないエラーが発生しました。

ここで何が起こっているのでしょうか?

ベストアンサー1

次の角かっこifはシェル構文ではなく、スタイル設定に応じて省略または省略できます。test。 (リンクされたマンページは外部test/[コマンドを記述しますが、多くのシェルは独自の実装を提供します。)

書く

if [ tty -s ];

書き込みに対応

if test tty -s;

test/には演算子[がないため失敗しますtty

ifその後、それを実行するコマンドが続き、コマンドの終了コードは後でどのブランチを取得するかを決定しますif。 0の場合はthenそのブランチをインポートし、そうでない場合はそのelseブランチ(存在する場合)をインポートします。

おすすめ記事