在Bash中给所有数组元素添加前缀

5

我正在将命令行参数存储在一个数组变量中(这对我来说是必要的)。 我想用通过一个变量传递的字符串作为前缀,给所有数组值添加前缀。

PREFIX="rajiv"

services=$( echo $* | tr -d '/' )

echo  "${services[@]/#/$PREFIX-}"

我得到了这个输出。
> ./script.sh webserver wistudio
rajiv-webserver wistudio

但我期望得到这个输出结果。
rajiv-webserver rajiv-wistudio
1个回答

7
你的数组初始化有误。请将其更改为以下内容:
services=($(echo $* | tr -d '/'))

没有外部的()services 将变成一个字符串,而参数扩展 "${services[@]/#/$PREFIX-}" 会向您的字符串添加 $PREFIX-
在这种情况下,可以使用 declare -p 来检查变量的内容。在这种情况下,declare -p services 应该显示:
declare -a services=([0]="webserver" [1]="wistudio") # it is an array!

而非

declare -- services="webserver wistudio"             # it is a plain string

是的,它起作用了。您能告诉我为什么错了吗?因为echo "$services[@]"仍然会正确地给出值。 - Rajiv Rai
我还想知道如果将其视为字符串,解决方案将如何工作?在我的另一个脚本中,我必须将附加的值传递给一个只接受字符串的可执行文件。 - Rajiv Rai
可以创建另一个问题并提供详细信息。 - codeforester
2
“echo $*” 由于单词分割和通配符扩展仍存在许多潜在问题。我建议使用“services=("${@////}")”来创建数组,因为它可以正确处理参数中的几乎任何内容。 - Gordon Davisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接