我将命令行参数存储在一个数组变量中。 (这对我来说是必要的)。 我想在所有数组值前加上一个通过变量传递的字符串。
PREFIX="rajiv"
services=$( echo $* | tr -d '/' )
echo "${services[@]/#/$PREFIX-}"
我得到了这个输出。
> ./script.sh webserver wistudio
rajiv-webserver wistudio
但我期待这个输出。
rajiv-webserver rajiv-wistudio
最佳答案
你的数组初始化错误。将其更改为:
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
关于arrays - 为 Bash 中的所有数组元素添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092411/