据我所知,单引号内的任何内容都不应该被扩展。Bash手册如下所述:
“将字符用单引号括起来会保留括号内每个字符的字面值。单引号中间不能出现单引号,即使前面加了反斜杠。”
然而,在较旧的bash版本中(例如bash 3.00.15(1)-release),这似乎并不正确。
例如,请考虑以下情况(这是一个更大脚本的人为例子):
在更新的bash版本中,这不是一个问题。在Bash
这是旧版bash shell中的一个错误吗?如何解决这个问题,使单引号在bash
例如,请考虑以下情况(这是一个更大脚本的人为例子):
#!/bin/bash
func() {
local -a cmds=('echo subshell echo hi')
for cmd in "${cmds[@]}"; do
echo "cmd: $cmd"
done
}
func
打印:
cmd: echo
cmd: subshell
cmd: echo
cmd: hi
然而我预期的是:
cmd: echo subshell echo hi
在更新的bash版本中,这不是一个问题。在Bash
3.2.25(1)-release
和4.3.46(1)-release
中,上述内容按预期工作。这是旧版bash shell中的一个错误吗?如何解决这个问题,使单引号在bash
3.00.15(1)-release
中保留值(如我上面所期望的)?
echo ${#cmds[@]}
显示了什么? - Barmarcmds[0]='foo bar'
等。另外,升级shell... - hek2mgl