Fishの基礎 - 繰り返し文

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2022年10月10日 (月) 03:40時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <br><br> == for文 == <syntaxhighlight lang="fish"> for <変数名> in <変数 または 式> <コマンド 1> <コマンド 2> # ... end </syntaxhighlight> <br> for文はループ構成であり、<コマンド>で指定されたコマンドを複数回実行する。<br> 各反復で、<変数名>で指定されたローカル変数に新しい値が代入される。<br> <変数名>が空の場合、<コマンド>は実行されず…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要



for文

 for <変数名> in <変数 または 式>
    <コマンド 1>
    <コマンド 2>
    # ...
 end


for文はループ構成であり、<コマンド>で指定されたコマンドを複数回実行する。
各反復で、<変数名>で指定されたローカル変数に新しい値が代入される。
<変数名>が空の場合、<コマンド>は実行されずにループが終了する。
(この時、<変数名>には、最後に割り当てられた値が格納されている)

<変数名>がまだ存在しない場合、ローカルスコープに設定される。
もし、forブロックが関数内に存在しない場合、同名のグローバル変数とユニバーサル変数があれば、それが使用される。

setと同様に、for文は$statusを変更しないが、その下位のコマンドの評価によって変更される。

 for i in foo bar baz
    echo $i
 end
 
 # 出力
 foo
 bar
 baz


※注意
Fish 3.0.0以前のバージョンでは、<変数名>はforブロックのローカル変数である。
ループが終了した時の<変数名>に最後に代入された値は、ループの外では使用できない。

 # Fish 3.0.0以前の場合
 
 for VAR in a b c
    echo -n ""
 end
 
 # もし、for文の実行前に変数VARが存在している場合は、その代入されていた値を出力する
 echo $VAR
 
 # 出力
 # 何も出力されない


Fishのfor文は、$IFSではなく改行で分割する。
もし、改行以外で分割する場合は、string splitstring split0string collectを使用する。
以下の例では、for文の変数に対して、改行以外で分割して代入している。

 for i in (find . -iname "hoge" -print0 | string split0)
    echo $i
 end