Bashの「for」ループには「in foo bar ...」部分はありません。

Bashの「for」ループには「in foo bar ...」部分はありません。

私は最近動作するので、私を混乱させるいくつかのコードを見ていましたが、うまくいくとは思わなかった。コードはこの例で単純化されました。

#!/bin/bash
for var;
do
  echo "$var"
done

コマンドライン引数で実行すると印刷されます。

$ ./test a b c
a
b
c

(私としては)予想外のことだった。var定義されていないためにエラーが発生しないのはなぜですか?これを使用することは「良い習慣」と見なされますか?

ベストアンサー1

forin value1 value2...Bourneに似たすべてのシェルに部分が指定されていない場合、ループは位置引数を繰り返します。

これは70年代後半からBourneシェルに存在していましたが、Bourneシェルではこれを省略する必要があります;(使用することもできますfor i do(一部の以前のashバージョンでは前に改行を追加する必要はありませんdo))。

バラよりBash for ループで「do」キーワードの目的は何ですか?より多くの情報を含むより多くの情報が必要な場合奇妙バリアント。

行為:

for i
do
  something with "$i"
done

良いアイデアです。一般的な製品よりも移植性と信頼性がわずかに高いです。

for i in "$@"; do
  something with "$i"
done

Bourne シェル、ksh88 は、一部のケース (たとえば、$#Bourne シェルの一部のバージョンで 0 の場合 (修正でき${1+"$@"}ない"$@")、$IFSBourne および ksh88 に空白文字が含まれていない場合)、またはこのnounsetオプションが有効になって$#いるbash(など、一部のシェルの一部のバージョンでは0です。${1+"$@"}解決策としてもう一度)。

おすすめ記事