fishとbash、シェルスクリプトを書くときの違いメモ

fishを使い始めたのですが、シェルスクリプトを書くときに文法が違うんですね。

すぐ慣れると思いますが、私が最初につまずいた部分をまとめました。

ANDとOR

fishでは、&&、||の代わりに、「; and」「; or」を使います。

【AND】

bashの場合:

command1 && command2

 

fishの場合:

command1; and command2

 

【OR】

bashの場合:

command1 || command2

 

fishの場合:

command1; or command2

大文字、小文字は区別しないので、

command1; AND command2
command1; OR command2

とも書けます。

 

シェル変数

変数に値をセットするのは「set」を使います。

 

bashの場合:

FOO="bar"

 

fishの場合:

set FOO "bar"

変数を削除する場合は「-e」オプションを使います。

set -e FOO

 

環境変数

環境変数にセットするのは「-x」。

 

bashの場合:

export FOO="bar"

 

fishの場合:「-x」オプションを使います。

set -x FOO "bar"

定義済みの変数を削除する場合は、シェル変数と同じ、「-e」を使って

set -e FOO

とします。

 

コマンドの実行

うっかり間違えやすいのがコマンドの実行でした。

 

bashの場合:バッククォート(`)、または $( ) で囲む

VAR=`whoami`
VAR=$(whoami)

 

fishの場合:ただ ( ) で囲むだけ。

VAR=(whoami)

 

ifの条件分岐

「fi」の代わりに「end」を使います。

 

bashの場合:

if test -f foo.txt; then
   cat foo.txt
else
   echo "not exists" 
fi

 

fishの場合:

if test -f foo.txt
   cat foo.txt
else
   echo "not exists"
end

 

コメント