为什么没有正确设置此shell变量

hei*_*nob 11 linux bash

我的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)

它的工作正确.

我正在拼命寻找导致这种效果的用户的配置差异.但说实话,我不知道.

那里有任何提示吗?

Cha*_*ffy 8

方括号创建一个匹配其中任何单个字符的glob表达式.

[123]匹配一个指定的文件1,23; 同样,[{"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)