[解決済み] Bash配列から要素を削除する
2022-05-01 23:30:57
質問
bashシェルで配列から要素を削除する必要があります。 一般的に私は単純にそうします。
array=("${(@)array:#<element to remove>}")
残念ながら、削除したい要素は変数なので、前のコマンドは使えません。 この下はその例です。
array+=(pluto)
array+=(pippo)
delete=(pluto)
array( ${array[@]/$delete} ) -> but clearly doesn't work because of {}
何か心当たりは?
どのように解決するのですか?
で思い通りに動作します。
bash
と
zsh
:
$ array=(pluto pippo)
$ delete=pluto
$ echo ${array[@]/$delete}
pippo
$ array=( "${array[@]/$delete}" ) #Quotes when working with strings
複数の要素を削除する必要がある場合。
...
$ delete=(pluto pippo)
for del in ${delete[@]}
do
array=("${array[@]/$del}") #Quotes when working with strings
done
洞窟
このテクニックは、実際には、プレフィックスにマッチする
$delete
を要素から削除します。要素全体とは限りません。
更新
本当に正確な項目を削除するには、配列の中を歩き回って各要素とターゲットを比較し、その上で
unset
を使用して、完全に一致するものを削除します。
array=(pluto pippo bob)
delete=(pippo)
for target in "${delete[@]}"; do
for i in "${!array[@]}"; do
if [[ ${array[i]} = $target ]]; then
unset 'array[i]'
fi
done
done
このようにして、1つ以上の要素が削除されると、インデックスは連続した整数の列ではなくなりますので、ご注意ください。
$ declare -p array
declare -a array=([0]="pluto" [2]="bob")
単純な話、配列は変更可能なデータ構造として設計されたものではありません。配列は主に、区切り文字として無駄な文字を使うことなく、1つの変数に項目のリストを格納するために使われます(例えば、空白を含むことができる文字列のリストを格納するため)。
隙間が問題になる場合は、隙間を埋めるように配列を再構築する必要があります。
for i in "${!array[@]}"; do
new_array+=( "${array[i]}" )
done
array=("${new_array[@]}")
unset new_array
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] スライスの値を表示する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ArrayIndexOutOfBoundsExceptionが発生しました。7Exception: at Test.m)
-
[解決済み] Bashで文字列を配列に分割する方法は?
-
[解決済み] bash で複数のサブプロセスが終了するのを待ち、いずれかのサブプロセスがコード !=0 で終了したときに終了コード !=0 を返すにはどうすればよいですか?
-
[解決済み] TypeScriptで配列の項目を削除するには?
-
[解決済み] ある要素が配列に含まれているかどうかを確認する方法
-
[解決済み] Bashで配列の要素を結合するには?
-
[解決済み] PostgreSQLは配列のカラムにインデックスを付けることができますか?
-
[解決済み] PowerShellで配列のすべてのオブジェクトの1つのプロパティの値を選択する
-
[解決済み] 行列を1次元の配列に変換する。
-
[解決済み] SwiftのJSONDecodeで配列のデコードに失敗する(単一要素のデコードに失敗した場合