Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2872

【fish】【ShellScript】fish環境で初めてShellScript(シェルスクリプト)を触る私が困ったこと

$
0
0
はじめに 初めまして! Life is Tech ! メンターで、某大学院の2年生で情報工学の研究に勤しんでいるきゃみです! 今日はShellScriptについてまとめてみました! ShellScriptはfishとbash(zsh)でコードが違う 仕事でfish環境にしなきゃいけないことがあり、その中で作業効率化のために初めてShellScriptを触ったら仕様がちょくちょく違う部分があったので、備忘録的にfishとbash(zsh)の仕様の違いをまとめてみました。 自分の認識なので間違ってる部分があれば是非コメントいただきたいです! 変数宣言が違う bashの場合 bash.sh hoge="fuga" fishの場合 fish.sh set hoge "fuga" =くらい使わせてくれよなあ、、、 変数の使い方が違う bashの場合 bash.sh $hoge ${hoge} # どっちでもいい fishの場合 fish.sh $hoge # こっちだけ許されてる シンプルになんで?連結する時にとても不便 引数の使い方が違う bashの場合 bash.sh $1 #一つ目の引数 $2 #二つ目の引数 fishの場合 fish.sh $argv[1] #一つ目の引数 $argv[2] #二つ目の引数 これはfishの方がわかりやすいかもしれないけど気づけない 四則演算の仕方が違う bashの場合 bash.sh $(( $hoge + 1 )) fishの場合 fish.sh expr $hoge + 1 四則演算までコマンド操作にするんじゃねええええ if文、ループ文の文法が違う bashの場合 bash.sh if [$hoge -ge 123] then; # なんか処理 fi for f in hoge fuga do # なんか処理 done fishの場合 bash.sh if [$hoge -ge 123] # なんか処理 end for f in hoge fuga # なんか処理 end これもなんとなくfish文法のが馴染みあるけど、エディターがシンタックスハイライトしてくれないのがうざすぎる コマンドの使い方が違う bashの場合 fish.sh for f in 'ls direcectory' do # なんか処理 done # 上下のどちらか for f in $(ls direcectory) do # なんか処理 done fishの場合 fish.sh for f in (ls direcectory) # なんか処理 end これもシンタックスハイライトしてくれないのでうざい なんかわからないけどif文の条件分に使えないコマンドがある これは自分の環境だからかもしれないけど、testコマンドが使えなかった fishの場合 fish.sh if (test $hoge -ge 123) # 実行すると上の行でエラーを吐く end 実際に吐くエラー iTerm create_matlab_code.sh (line 16): Command substitutions not allowed if (test $i -ge 2) && [ $i -le 11 ] ^ from sourcing file create_matlab_code.sh source: Error while reading file 'create_matlab_code.sh' 最後に こんなに仕様変えなくてもいいじゃないか...

Viewing all articles
Browse latest Browse all 2872

Trending Articles