BashユーザのためのFish
ナビゲーションに移動
検索に移動
概要
Fishは、POSIX互換ではないため、Bash等の他のシェルとは異なる動作をするものがある。
いずれのシェルも、基本的にコマンドラインの拡張、パイプ、リダイレクト、変数、グロブを備えており、様々な方法でコマンド出力を使用する。
コマンドの置換
Fishはコマンド置換を、$(command)、または、(command)と記述する。
変数
Fishは、setコマンドにより変数の設定や消去を行う。
また、declareコマンド、unsetコマンド、exportコマンド等の様々な個別の組み込みを行う。
例えば、setコマンドは、オプションで変数のスコープやエクスポートの可否を決定する。
# 変数PAGERをグローバルに定義およびエクスポートすることにより、export PAGER=lessと同様になる
set -gx PAGER less
# alocalvariable=fooのように、$alocalvariableをローカルにのみ定義する
set -l alocalvariable foo
変数を消去する。
set -e PAGER
<変数名>=<値>文は、環境のオーバーライドとして利用できる。
PAGER=cat git log
Fishは、単語の分割を行わないため、変数に値が設定されると、その値はそのまま維持される。
そのため、Bashのように変数の展開をダブルクオートで記述する必要はない。
# Bashの場合
# ダブルクォートを使用していないため、ワードスプリッティング(2行で表示)となる
foo="bar baz"
printf '%s\n' $foo
# 出力
bar
baz
# Fishの場合
# 変数fooは1つの要素として設定されているため、1つの要素として渡される (1行で表示される)
set foo "bar baz"
printf '%s\n' $foo
# 出力
foo baz
変数は全て配列(リスト)であるため、変数を展開するとその全ての要素が展開される。
配列の各要素は、それ自身の引数となる。(Bashでいう${var[@]}と同様)
set var "foo bar" banana
printf '%s\n' $var
# 出力
foo bar
banana
リストの特定の要素を選択することができます。
echo $list[5..7]
setコマンドを使用して、コマンドの出力に変数を設定することも可能である。
# 変数lineにfile.txtファイル内の全ての内容を設定して、1行に1つの要素を設定する
set lines (cat file.txt)
リテラル値とコマンドを混在させて、変数に代入することも可能である。
set numbers 1 2 3 (seq 5 8) 9
printf '%s\n' $numbers
# 出力
1
2
3
5
6
7
8
9
set <変数名> = <値>コマンドは間違ったシンタックスであり、変数に2つの値(=と<値>)を代入してしまう。