📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == <br><br> == for文 == <syntaxhighlight lang="fish"> for <変数名> in <変数 または 式> <コマンド 1> <コマンド 2> # ... end </syntaxhighlight> <br> for文はループ構成であり、<コマンド>で指定されたコマンドを複数回実行する。<br> 各反復で、<変数名>で指定されたローカル変数に新しい値が代入される。<br> <変数名>が空の場合、<コマンド>は実行されず…」 |
|||
| (同じ利用者による、間の2版が非表示) | |||
| 12行目: | 12行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
<code>for</code>文はループ構成であり、<コマンド>で指定されたコマンドを複数回実行する。<br> | |||
各反復で、<変数名>で指定されたローカル変数に新しい値が代入される。<br> | 各反復で、<変数名>で指定されたローカル変数に新しい値が代入される。<br> | ||
<変数名>が空の場合、<コマンド>は実行されずにループが終了する。<br> | <変数名>が空の場合、<コマンド>は実行されずにループが終了する。<br> | ||
| 18行目: | 18行目: | ||
<br> | <br> | ||
<変数名>がまだ存在しない場合、ローカルスコープに設定される。<br> | <変数名>がまだ存在しない場合、ローカルスコープに設定される。<br> | ||
もし、<code>for</code>ブロックが関数内に存在しない場合、同名のグローバル変数とユニバーサル変数があれば、それが使用される。<br> | |||
<br> | <br> | ||
<code>set</code>と同様に、for文は<code>$status</code>を変更しないが、その下位のコマンドの評価によって変更される。<br> | <code>set</code>と同様に、for文は<code>$status</code>を変更しないが、その下位のコマンドの評価によって変更される。<br> | ||
| 34行目: | 34行目: | ||
<br> | <br> | ||
<u>※注意</u><br> | <u>※注意</u><br> | ||
<u>Fish 3.0.0以前のバージョンでは、<変数名> | <u>Fish 3.0.0以前のバージョンでは、<変数名>は<code>for</code>ブロックのローカル変数である。</u><br> | ||
<u>ループが終了した時の<変数名>に最後に代入された値は、ループの外では使用できない。</u><br> | <u>ループが終了した時の<変数名>に最後に代入された値は、ループの外では使用できない。</u><br> | ||
<syntaxhighlight lang="fish"> | <syntaxhighlight lang="fish"> | ||
| 50行目: | 50行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
Fishの<code>for</code>文は、<code>$IFS</code>ではなく改行で分割する。<br> | |||
もし、改行以外で分割する場合は、<code>string split</code>、<code>string split0</code>、<code>string collect</code>を使用する。<br> | もし、改行以外で分割する場合は、<code>string split</code>、<code>string split0</code>、<code>string collect</code>を使用する。<br> | ||
<br> | |||
以下の例では、<code>for</code>文の変数に対して、改行以外で分割して代入している。<br> | |||
<syntaxhighlight lang="fish"> | <syntaxhighlight lang="fish"> | ||
for i in (find . -iname "hoge" -print0 | string split0) | for i in (find . -iname "hoge" -print0 | string split0) | ||
echo $i | echo $i | ||
end | |||
</syntaxhighlight> | |||
<br><br> | |||
== while文 == | |||
<syntaxhighlight lang="fish"> | |||
while <変数 または 式> | |||
<コマンド 1> | |||
<コマンド 2> | |||
# ... | |||
end | |||
</syntaxhighlight> | |||
<br> | |||
<code>while</code>文は、<変数 または 式>を繰り返し実行して、終了ステータスが<code>0</code>であれば<コマンド>を実行する。<br> | |||
<code>while</code>文の終了ステータスは、実行された<コマンド>の最後の反復処理の終了ステータス、または、何も実行されていない場合は<code>0</code>になる。<br> | |||
(これは他のシェルと同様、POSIX互換である)<br> | |||
<br> | |||
複雑な条件として、<code>and</code>や<code>or</code>を使用することができる。<br> | |||
<code>break</code>を含む<code>while true</code>文を使用すると、さらに複雑な制御が可能である。<br> | |||
<br> | |||
Fishでは、<code>until</code>文が存在しないため、<code>while not</code>文や<code>while !</code>文を使用すること。<br> | |||
<br> | |||
以下の例では、foo.txtファイル、または、bar.txtファイルが存在する限り、10秒間隔でfile existsと出力している。<br> | |||
<syntaxhighlight lang="fish"> | |||
while [ -f foo.txt ]; or [ -f bar.txt ] | |||
echo "file exists" | |||
sleep 10 | |||
end | end | ||
</syntaxhighlight> | </syntaxhighlight> | ||