我的linux机器上有一个特定的用户,以下命令
json='[{"date":"2016"}]' && echo ${json}
Run Code Online (Sandbox Code Playgroud)
输出1而不是[{"date":"2016"}].
我的机器上的所有其他用户都能正常工作.当我将命令更改为(省略1)
json='[{"date":"206"}]' && echo ${json}
Run Code Online (Sandbox Code Playgroud)
它的工作正确.
我正在拼命寻找导致这种效果的用户的配置差异.但说实话,我不知道.
那里有任何提示吗?
方括号创建一个匹配其中任何单个字符的glob表达式.
[123]匹配一个指定的文件1,2或3; 同样,[{"date":"2016"}]匹配命名的文件d,a,t,e,:,2,0,1,6,",{或}.
您没有注意到没有任何文件命名的用户,因为没有匹配的glob表达式的默认行为不会对其自身进行求值(尽管可以修改此默认值shopt -s nullglob,在这种情况下,没有匹配的glob评估为零).
引用你的扩展 - echo "$json"- 避免这种情况.
重现:
json='[{"date":"2016"}]'
owd=$PWD
tempdir=$(mktemp -d "${TMPDIR:-/tmp}/test.XXXXXX")
cd "$tempdir" && {
touch 1
echo "With the bug: " $json
echo "Without the bug: " "$json"
}
# cleanup
cd "$owd"
rm -rf "$tempdir"
Run Code Online (Sandbox Code Playgroud)