2016-08-08 6 views
1

中括弧は他の構文に適していますか?if-then-else-fiの代わりにLinuxの中括弧do-done

if [ -n "$TEST" ] ; then 
     XX='yes'; echo 'yes' 
    else 
     XX='no'; echo 'no' 
    fi 

別の対

[ -n "$TEST" ] && { XX='yes'; echo 'yes' } || { XX='no'; echo 'no' } 

:あなたの最初の例で

for num in {000..2}; do echo "$num"; done 

または

for num in {000..2}; { echo "$num"; } 
+0

おそらくこれは2つの別々の質問になるでしょう。私たちはすでに、 "is A && B || c a bashの三項演算子についてのQ&Aナレッジベースエントリーを持っていますか?"なぜなら後者の構文が働く理由についての質問もあるからです。 –

答えて

3

場合、A && B || Cif A; then B else Cは異なる動作を持っていますの終了ステータスはゼロではありません。

[ -n "$TEST" ] && { echo this; false; } || { echo "this too?"; } 

あなたの第二の例 が構文エラーであるべきです。ドキュメントには、do/doneのペアを別の複合コマンド(これは{...})と置き換えることはできません。

更新日:bashのメンテナーから、元のBourneシェルの文書化されていない機能との下位互換性を提供する文書化されていない機能だと言われています。

+0

最初の良い点!これは私の質問の理由を説明しますありがとう! 'for'ステートメントでは、UbuntuとDebian上でうまく動作します。 – fcm

+1

それはそうです。私はそれに頼るとは思えません。それはせいぜい文書化されていない機能のようです。 – chepner

+1

@fcm bashとkshでは動作しますが、他のシェルでは動作しません。 'dash'はそれを扱うことができません。DebianとUbuntuのデフォルトの'/bin/sh'です。 –