Arrays 向Bash中的所有数组元素添加前缀

Arrays 向Bash中的所有数组元素添加前缀,arrays,linux,bash,shell,Arrays,Linux,Bash,Shell,我将命令行参数存储在数组变量中。(这对我来说是必要的)。 我想用一个通过变量的字符串作为所有数组值的前缀 PREFIX="rajiv" services=$( echo $* | tr -d '/' ) echo "${services[@]/#/$PREFIX-}" 我得到这个输出 > ./script.sh webserver wistudio rajiv-webserver wistudio rajiv-webserver rajiv-wistudio 但我期待这个结果

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

PREFIX="rajiv"

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

echo  "${services[@]/#/$PREFIX-}"
我得到这个输出

> ./script.sh webserver wistudio
rajiv-webserver wistudio
rajiv-webserver rajiv-wistudio
但我期待这个结果

> ./script.sh webserver wistudio
rajiv-webserver wistudio
rajiv-webserver rajiv-wistudio

您的阵列初始化错误。将其更改为:

services=($(echo $* | tr -d '/'))
如果没有外部的
()
服务将成为一个字符串,参数扩展
“${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

对成功了。你能告诉我为什么错了吗?因为回音“$Services(@)”仍然正确地给了我值,我也想知道如果把它看作一个字符串,那么解决方案是如何工作的呢?在我的另一个脚本中,我必须将附加值传递给只接受字符串的可执行文件。可能需要创建另一个包含详细信息的问题。
echo$*
由于分词和通配符扩展,仍然存在许多潜在问题。我建议使用
services=(“${@/\/}”)
来创建数组,因为它可以正确处理参数中的几乎所有内容。