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=(“${@/\/}”)
来创建数组,因为它可以正确处理参数中的几乎所有内容。