Bashで角かっこで囲まれた文字列をエコーすると、「b」が返されます。

Bashで角かっこで囲まれた文字列をエコーすると、「b」が返されます。
$ a='"apple","ball","cat"'
$ a='['$a
$ echo $a
["apple","ball","cat"
$ a=$a']'
$ echo $a
b

b結果を期待していましたが、結果が出て恥ずかしいですね["apple,"ball","cat"]。私がここで何を見逃しているのでしょうか?

これはbashMacのシェルからのものです。 CentOS 7でも見ることができますが、Fedoraでは見ることができません。誰かがこれを説明できますか?

答え1

b現在、ディレクトリに同じ名前のファイルがあります。

[...]

パターン一致式です。[名前は、間に単一の文字で構成されているすべてのファイルと一致します]

*これは、値を引用符なしで変数を使用するのと似ています。

答え2

Haukeはなぜこれが起こるのか答えた。後で参照できるように、次の方法で問題を解決することもできますstrace

$ touch a b l
$ a='["apple","ball"]'                                                      
$ strace -e trace=execve echo $a
execve("/bin/echo", ["echo", "a", "b", "l"], [/* 82 vars */]) = 0
a b l
+++ exited with 0 +++

または以下を使用してset -x

$ set -x; echo $a
+ set -x
+ echo a b l
a b l

すぐには明確ではないかもしれませんが、少なくともシェルが引用符で囲まれていない変数を項目リストに変換したのを見ると、ファイル名拡張が発生したと推測できます。

関連情報