LoginSignup
0
0

More than 5 years have passed since last update.

fishでlistのindexを確認するtestにはcontainsが使える

Posted at

PHPで言うところのisset($array[$index])をfishでどうやるか。

stack overflowなどにはいろいろな方法が載っているが、複雑すぎて理解できないし、書きたくなかった。

ループでのやりかた

思いつくけどやりたくないやり方

set list one two three
for value in $list
    if test $value = $argv[1]
        echo "Hit!"
        break
    end
end

containsでのやりかた

contains:【条件式】単語がリストに入っているかをテスト

このサイトのリストらへんを見てたんですが、containsへの言及がなく、サイト内をargvで検索したときにたまたま見つけた。
Googleでの検索は厳しいよお。

set list one two three can
if contains $argv[1] $list
    echo "Hit!"
end

できればこれがしたい

zsh の配列操作の基本から応用まで - Qiita

${配列名[(r)条件]}${配列名[(i)条件]} という形式も使える。
1つ目の方は「条件にマッチした最初の要素を返す」、2つ目の方は「条件にマッチした最初の要素番号を返す」という意味になる。

arr3=(aaa bbb1 ccc aaa1 bbb2 aaa33)
# bbb で始まる最初の要素を取得する
echo ${arr3[(r)bbb*]} #=> bbb1
# bbb で始まる最初の要素の要素番号を取得する
echo ${arr3[(i)bbb*]} #=> 2
# 見つからなかった場合は最後の要素番号+1になる
echo ${arr3[(i)xxx*]} #=> 7

オプションなどの指定は、

Crystalのコマンドが完全一致で入力しなくても実行されるので中を見た - Qiita

を見てから前方一致が気に入っているので、できればよかった。

よくわかんないの

bash - Easiest way to check for an index or a key in an array? - Stack Overflow

[ $array[$key]+abc ]はfishだとInvalid index valueでダメだった。

シェルスクリプトで、配列内の文字列と一致しない場合の処理を記述する | 俺的備忘録 〜なんかいろいろ〜

なんか違う

0
0
3

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
0
0