fish shellでbashなどの「command && ok || ng」と同じ処理をさせる

bashやzshだと、以下のようにコマンドを実行することで、そのコマンドの実行結果に応じた処理を指定することができる。

コマンド && コマンドが正常終了の場合の処理 || コマンドが正常終了出ない場合の処理
blacknon@BS-PUB-DEVELOP:~$ ls test*
test.txt  test1.txt
blacknon@BS-PUB-DEVELOP:~$ ls test.txt && echo OK || echo NG
test.txt
OK
blacknon@BS-PUB-DEVELOP:~$ ls test.txt_ && echo OK || echo NG
ls: 'test.txt_' にアクセスできません: そのようなファイルやディレクトリはありません
NG

これと同様の処理をfishで行う場合、「&&」や「||」だとエラーになる。 じゃどうするのかというと、以下のように「;and」や「;or」で同様の処理が行える。

コマンド ;and echo ok ;or echo ng

blacknon@BS-PUB-DEVELOP ~> ls test*
test.txt  test1.txt
blacknon@BS-PUB-DEVELOP ~> ls test.txt ;and echo ok ;or echo ng
test.txt
ok
blacknon@BS-PUB-DEVELOP ~> ls test.txt_ ;and echo ok ;or echo ng
ls: 'test.txt_' にアクセスできません: そのようなファイルやディレクトリはありません
ng
blacknon@BS-PUB-DEVELOP ~> ls test.txt_ && echo ok ;or echo ng
Unsupported use of '&&'. In fish, please use 'COMMAND; and COMMAND'.
fish: ls test.txt_ && echo ok ;or echo ng
                    ^
blacknon@BS-PUB-DEVELOP ~> ls test.txt_ ;and echo ok || echo ng
Unsupported use of '||'. In fish, please use 'COMMAND; or COMMAND'.
fish: ls test.txt_ ;and echo ok || echo ng
                                 ^
blacknon@BS-PUB-DEVELOP ~>

まぁ、間違えても↑みたいにヒントとして出してくれるので、特に問題ないかとは思うのだが。