なにがあったの
AにBが含まれるか?を判定したい場面はたくさんある。
他のプログラミング言語でいうとcontain的な処理。
それをシェル初心者な私はださーい書き方をしてしまったので、備忘録。
今回は、git@github.com:natsumisawa/github-convs.git
に git@
が含まれているかどうかを判定したかった。
私がやってしまったダサい書き方
検索したい文字列である git@
でgrepして、行数出力して1だったら、それは含まれるということだ〜!と思った。
ダサい書き方、というか私が自己流雰囲気でシェルやってるだけでふつうはこう書かないのか。
$ if [ `echo 'git@natsumisawa:github-convs' | grep git@ | grep -c ''` -eq 1 ] ; then ; echo "ssh認証です" ; fi
ssh認証です
ちなみにgrep -c ''じゃなくてwc -lで書いたらうまく動作しなかった。
(しかも含まれない場合なんかエラー出てるし・・・)
$ if [ `echo 'https://natsumisawa:github-convs' | grep git@ | grep -c ''` -eq 1 ] ; then ; echo "ssh認証です" ; else ; echo "https認証です" ;fi
[: unknown condition: -eq
https認証です
カッコイイ書き方
ふつうはこうやって書くらしい。
$ if echo 'git@natsumisawa:github-convs' | grep 'git@' ; then ; echo "ssh認証です" ; else ; echo "https認証です" ; fi
ssh認証です
一番大切なこと:原理を知る
if文の条件式の中が空文字だとfalseとして判定されるらしい。
そもそも条件式の中をbooleanにしないといけない、とは誰も言ってないもんな。
スクリプト言語ではよくあることらしく、奥が深いなと思った。
まだまだシェル芸習得までの道のりは長い・・・。