連想配列のキーとしてファイル名を使用するbashスクリプトがあります。ファイル名の中には引用符が含まれているため、それらを設定解除する方法が見つからないようです。ここでキーに引用符が含まれている場合、連想配列の値を設定解除する
は、端末から問題を複製する例を示します
$ declare -A x
$ y="key with spaces"
$ z="key with spaces and ' quote"
$ x[$y]=5 # this works fine
$ x[$z]=44 # as does this
$ echo "${x[$y]}" "${x[$z]}" # no problems here
5 44
$ unset x["$y"] # works
$ unset x["$z"] # does not work
bash: unset: `x[key with spaces and ' quote]': not a valid identifier
$ echo "${x[$y]}" "${x[$z]}" # second key was not deleted
44
私のスクリプトで処理されたファイル名、少なくともする必要があり、合理的な範囲(任意であり、関係なく、彼らはそれらに持っているもの、文字の作業する必要があります印刷可能な文字で作業します)。unsetは、特定のプロパティを持つファイルのフラグをクリアするために使用されます。
これらの特定のキーに引用符が含まれている可能性がある場合、bashを解除するにはどうすればよいですか?
あなたの代わりに未設定のそれに空の文字列を割り当ててもらえますか? – Barmar
@Barmar残念ながら、私の場合は値がユーザー提供であり、理論的には空である可能性があるため、私の場合はうまくいきません。私が今考えることのできる主な回避策は、 'isunset [$ key] = 1'のような追加の配列を持つことです。 – codebeard
これは私のバッシュバグのようですが、この特定の事例への他の参照は見つかりません。 – Barmar