MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
BashユーザのためのFishのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
BashユーザのためのFish
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Fishは、POSIX互換ではないため、Bash等の他のシェルとは異なる動作をするものがある。<br> <br> いずれのシェルも、基本的にコマンドラインの拡張、パイプ、リダイレクト、変数、グロブを備えており、様々な方法でコマンド出力を使用する。<br> <br><br> == コマンドの置換 == Fishはコマンド置換を、<code>$(command)</code>、または、<code>(command)</code>と記述する。<br> <br> また、Fishには、<code>$IFS</code>は存在せず、改行で分割する。<br> それ以外の方法で分割する場合は、<code>split</code>コマンド、<code>string split0</code>コマンド、<code>string collect</code>コマンドのいずれかを使用する。<br> <br> 詳細は、[[Fishの基礎 - 繰り返し文#for文]]を参照すること。<br> <br><br> == 変数 == Fishは、<code>set</code>コマンドにより変数の設定や消去を行う。<br> また、<code>declare</code>コマンド、<code>unset</code>コマンド、<code>export</code>コマンド等の様々な個別の組み込みを行う。<br> <br> 例えば、<code>set</code>コマンドは、オプションで変数のスコープやエクスポートの可否を決定する。<br> <syntaxhighlight lang="fish"> # 変数PAGERをグローバルに定義およびエクスポートすることにより、export PAGER=lessと同様になる set -gx PAGER less # alocalvariable=fooのように、$alocalvariableをローカルにのみ定義する set -l alocalvariable foo </syntaxhighlight> <br> 変数を消去する。<br> <syntaxhighlight lang="fish"> set -e PAGER </syntaxhighlight> <br> <code><変数名>=<値></code>文は、環境のオーバーライドとして利用できる。<br> <syntaxhighlight lang="fish"> PAGER=cat git log </syntaxhighlight> <br> Fishは、単語の分割を行わないため、変数に値が設定されると、その値はそのまま維持される。<br> そのため、Bashのように変数の展開をダブルクオートで記述する必要はない。<br> <syntaxhighlight lang="bash"> # Bashの場合 # ダブルクォートを使用していないため、ワードスプリッティング(2行で表示)となる foo="bar baz" printf '%s\n' $foo # 出力 bar baz </syntaxhighlight> <br> <syntaxhighlight lang="fish"> # Fishの場合 # 変数fooは1つの要素として設定されているため、1つの要素として渡される (1行で表示される) set foo "bar baz" printf '%s\n' $foo # 出力 foo baz </syntaxhighlight> <br> 変数は全て配列(リスト)であるため、変数を展開するとその全ての要素が展開される。<br> 配列の各要素は、それ自身の引数となる。(Bashでいう<code>${var[@]}</code>と同様)<br> <syntaxhighlight lang="fish"> set var "foo bar" banana printf '%s\n' $var # 出力 foo bar banana </syntaxhighlight> <br> リストの特定の要素を選択することができます。<br> <syntaxhighlight lang="fish"> echo $list[5..7] </syntaxhighlight> <br> <code>set</code>コマンドを使用して、コマンドの出力に変数を設定することも可能である。<br> <syntaxhighlight lang="fish"> # 変数lineにfile.txtファイル内の全ての内容を設定して、1行に1つの要素を設定する set lines (cat file.txt) </syntaxhighlight> <br> リテラル値とコマンドを混在させて、変数に代入することも可能である。<br> <syntaxhighlight lang="fish"> set numbers 1 2 3 (seq 5 8) 9 printf '%s\n' $numbers # 出力 1 2 3 5 6 7 8 9 </syntaxhighlight> <br> <code>set <変数名> = <値></code>コマンドは間違ったシンタックスであり、変数に2つの値(=と<値>)を代入してしまう。<br> <br><br> == ワイルドカード == Fishは、構文として*グロブおよび**グロブ(および非推奨の?グロブ)のみをサポートしている。<br> ただし、<code>for</code>文、<code>set</code>、<code>count</code>、グロブが変数オーバーライド(<code>set VAR *</code>文等)が使用されている場合は、(Bashの<code>nullglob</code>オプションのように)何もない状態に展開される。<br> <br> グロブは展開された変数では適用されないため、以下に示すような記述は、どのファイルにもマッチしない。<br> <syntaxhighlight lang="fish"> set foo "*" echo $foo </syntaxhighlight> <br> 引用符で囲まれていない<code>*</code>、または、<code>?</code>が含まれている場合、それをワイルドカードとして使用することができる。<br> * * *: ファイル名に含まれる任意の文字数(0を含む)にマッチする。(<code>/</code>は含まれない) *: <br> * ** *: 任意の数の文字(0を含む)に再帰的にマッチする。(サブディレクトリは降順) *: 自身のセグメントである場合は、他のシェルとの互換性のために、そのセグメントもマッチする可能性がある。 *: <br> * ? *: /以外の任意の1文字にマッチする。 *: ただし、<code>?</code>の使用は非推奨であり、qmark-noglob機能フラグで無効にできるため、<code>?</code>は通常の文字として扱うことができる。 <br> ワイルドカードのマッチは、大文字小文字を区別せずにソートされる。<br> 数字を含むマッチをソートする場合、それらは自然にソートされて、'1'、'5'、'12'という文字列は1,5,12のようにソートされる。<br> <br> 隠しファイル(名前がドットで始まるもの)は、ワイルドカードの文字列がその場所にドットを持たない限り、ワイルドカードを使用する際に考慮されない。<br> <br> * a* *: 現在のディレクトリにある'a'で始まる全てのファイルにマッチする。 *: <br> * ** *: カレントディレクトリとそのサブディレクトリにある全てのファイルとディレクトリにマッチする。 *: <br> * ~/.* *: ホームディレクトリにある全ての隠しファイルとディレクトリにマッチする。 <br> 多くのコマンドでは、ワイルドカードの展開に失敗する時、コマンドは実行されずに環境変数<code>status</code>が<code>0</code>以外に設定されて、警告が表示される。<br> この動作は、Bashが<code>shopt -s failglob</code>で行うのと同様である。<br> <br> 例外として、<code>set</code>、<code>path</code>、<code>overrides</code>文での変数のオーバーライド、<code>count</code>文、<code>for</code>文がある。<br> これらのグロブは、Bashの<code>shopt -s nullglob</code>のように、引数ゼロに展開される。<br> <syntaxhighlight lang="fish"> # .txtファイルをリストアップして、存在しない場合は警告を表示する ls *.txt </syntaxhighlight> <br> <syntaxhighlight lang="fish"> # .txtファイルが存在する場合は、その一覧を表示する set foos *.txt if count $foos >/dev/null ls $foos end </syntaxhighlight> <br> Bashとは異なり、Fishは(デフォルトでは)マッチしない場合、リテラルなグロブ文字を渡さないため、<br> <code>find</code>コマンドや<code>sudo zypper install</code>のようにマッチング自体を行うコマンドでは、引用符を追加する必要がある。<br> <syntaxhighlight lang="fish"> sudo zypper install "ncurses-*" find . -iname "*.txt" </syntaxhighlight> <br><br> == 引用符 == Fishには、2つの引用符<code>""</code>と<code><nowiki>''</nowiki></code>がある。<br> 変数はダブルクォートで展開されて、引用符が無い場合はシングルクォートで展開される。<br> <br> また、<code>$''</code>は存在しないが、変換されるようなシーケンスはクォートされていない時に変換される。<br> <syntaxhighlight lang="fish"> echo a\nb # 出力 a b </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:シェルスクリプト]]
BashユーザのためのFish
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse