gpt4 book ai didi

bash - 数组中的单引号扩展

转载 作者:行者123 更新时间:2023-11-29 09:25:21 25 4
gpt4 key购买 nike

AFAICT,单引号内的任何内容都不应展开。 Bash 手册说:

Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.

但是,在较旧的 bash 版本中,这在 Bash 3.00.15(1)-release 中似乎并非如此。

例如,考虑(这是一个更大脚本的人为示例):

#!/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)-release4.3.46(1)-release 中按预期工作。

这是旧版 bash shell 中的错误吗?如何解决它以便单引号保留 bash 3.00.15(1)-release 中的值(正如我上面预期的那样)?

最佳答案

至少在 bash 3.00.16(最接近我可以编译而无需手动修补 3.00)中,错误似乎与 local 命令中的分配有关。以下产生预期的输出:

func() {
local -a cmds
cmds=('echo subshell echo hi')

for cmd in "${cmds[@]}"; do
echo "cmd: $cmd"
done
}

func

这不是特定于local;这似乎是处理作为参数出现的分配的问题。

bash-3.00$ declare -a foo=('echo bar')
bash-3.00$ printf '%s\n' "${foo[@]}"
echo
bar
bash-3.00$ foo=('echo bar')
bash-3.00$ printf '%s\n' "${foo[@]}"
echo bar

关于bash - 数组中的单引号扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com