[解決済み] Bashの配列に要素があるかどうかをチェックする [重複]。
2023-08-17 03:20:09
質問
私は、Bashで配列内に要素が存在するかどうかをチェックする効率的な方法があるかどうか疑問に思っていました。私は、Pythonでできることと似たようなものを探しています。
arr = ['a','b','c','d']
if 'd' in arr:
do your thing
else:
do something
Bash 4+でbash用の連想配列を使った解決策を見たことがありますが、他に解決策があるのか気になります。
私が知っている些細な解決策は、配列の中で反復することですが、私はそれを望んでいないことを理解してください。
どのように解決するのですか?
できます。
if [[ " ${arr[*]} " == *" d "* ]]; then
echo "arr contains d"
fi
この場合、例えば "a b" を探した場合、その部分文字列は結合文字列に含まれますが、配列の要素としては含まれませんので、誤検出となります。このジレンマは、どのようなデリミタを選んでも発生します。
最も安全な方法は、要素を見つけるまで配列の上をループすることです。
array_contains () {
local seeking=$1; shift
local in=1
for element; do
if [[ $element == "$seeking" ]]; then
in=0
break
fi
done
return $in
}
arr=(a b c "d e" f g)
array_contains "a b" "${arr[@]}" && echo yes || echo no # no
array_contains "d e" "${arr[@]}" && echo yes || echo no # yes
以下は、配列のすべての要素ではなく、配列の名前だけを渡す、よりクリーンなバージョンです。
array_contains2 () {
local array="$1[@]"
local seeking=$2
local in=1
for element in "${!array}"; do
if [[ $element == "$seeking" ]]; then
in=0
break
fi
done
return $in
}
array_contains2 arr "a b" && echo yes || echo no # no
array_contains2 arr "d e" && echo yes || echo no # yes
について
連想配列
を含むかどうかをテストする非常に整然とした方法があります。
キー
: これは
-v
演算子
$ declare -A arr=( [foo]=bar [baz]=qux )
$ [[ -v arr[foo] ]] && echo yes || echo no
yes
$ [[ -v arr[bar] ]] && echo yes || echo no
no
参照 6.4 Bashの条件式 を参照してください。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] VBAの配列ソート機能?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Verilogで1次元と2次元のバイト配列を宣言して使用するには?
-
[解決済み] Swift Closuresの$0と$1の意味は何ですか?
-
[解決済み] MATLABで動的配列を作成する方法
-
[解決済み] SwiftでUInt8バイト配列を文字列に変換する方法
-
[解決済み] TypeScriptの配列を文字列リテラルに変換するタイプ
-
[解決済み] Perl の配列を繰り返し処理する最良の方法
-
[解決済み] なぜgulp.srcはファイルへの完全なパスの配列が渡されるのを好まないのですか?
-
[解決済み] VBAの配列ソート機能?
-
[解決済み] TypeScriptで集合を配列に変換する方法
-
[解決済み] numpyの "isnotnan "機能、もっとpythonicにできないか?