LoginSignup
3
0

More than 5 years have passed since last update.

シェルでcontainみたいなことする時にダサい書き方をしてしまった(そしてカッコよくした)

Posted at

なにがあったの

AにBが含まれるか?を判定したい場面はたくさんある。
他のプログラミング言語でいうとcontain的な処理。
それをシェル初心者な私はださーい書き方をしてしまったので、備忘録。

今回は、git@github.com:natsumisawa/github-convs.gitgit@ が含まれているかどうかを判定したかった。

私がやってしまったダサい書き方

検索したい文字列である 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にしないといけない、とは誰も言ってないもんな。
スクリプト言語ではよくあることらしく、奥が深いなと思った。
まだまだシェル芸習得までの道のりは長い・・・。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0