(注:はい非常に似た質問、昨日は奇妙だと尋ねましたが、私は興味のある主な構文を扱いません。これを含むように他の質問を更新すると、回答が無効になる可能性があるため、ここでは他の質問から欠落している内容に焦点を当てます。全体像を見たい人は、誰もがこれら2つの質問とそれに対する答えを見なければなりません。 )
私は通常、ifステートメントを次のように書いています。
if [[ -z "$SOMETHING" ]]; then
# blah blah blah
fi
これはBashとZシェルで私にうまくいきましたが、最近角かっこを完全に削除する構文:
if command -v given-command > /dev/null 2>&1; then
echo given-command is available
else
echo given-command is not available
fi
括弧のないバージョンは移植可能ですか?提供されるオプションと比較してどうですか?ここ?
私の標準バージョンは主にBashとZ Shellでのみサポートされていますか([[ -w /home/durrantm ]] && echo "writable"
他の質問で言及されているバージョンと似ています)?
答え1
はい、あなたの標準バージョンは、あなたがコメントにリンクした質問のようにPOSIX標準ではありません。ただし、次のような場合があります。
if some-command args; then ...
私はこれがこれの唯一のポータブルフォームであると言いたいと思いますif
。それがif
まさにそれだからです。 (関数、シェル組み込み、または実行可能1の場合があります)この実行時に使用された引数と入力を返すif
場合は、いくつかの操作を実行してください。some-command
0
if [ ]
or if [[ ]]
、andを実行すると、[ ]
条件付きテストがtrueの場合は[[ ]]
プログラムまたはシェル組み込みが返されます。に0
変換すると、常に角かっこなしでフォームを実行することがわかります。[
test
if [ ... ]
# same as
if /bin/test ...
1よりif
正確には、どのように構築するかを見てみましょう。次のように定義されます。:
これもしコマンドを実行する必要があります。化合物一覧終了ステータスを使用して、他の実行を決定します。化合物一覧。
形式はもし構造は次のとおりです。
if compound-list then compound-list [elif compound-list then compound-list] ... [else compound-list] fi