Raj*_*Rai 5 linux arrays bash shell
我将命令行参数存储在数组变量中。(这对我来说是必要的)。我想用通过变量传递的字符串作为所有数组值的前缀。
PREFIX="rajiv"
services=$( echo $* | tr -d '/' )
echo "${services[@]/#/$PREFIX-}"
Run Code Online (Sandbox Code Playgroud)
我得到这个输出。
> ./script.sh webserver wistudio
rajiv-webserver wistudio
Run Code Online (Sandbox Code Playgroud)
但我期待这个输出。
rajiv-webserver rajiv-wistudio
Run Code Online (Sandbox Code Playgroud)
你的数组初始化是错误的。改成这样:
services=($(echo $* | tr -d '/'))
Run Code Online (Sandbox Code Playgroud)
如果没有外部(),services将成为一个字符串,并且参数扩展"${services[@]/#/$PREFIX-}"会添加$PREFIX-到您的字符串中。
在这种情况下,declare -p可用于检查变量的内容。在这种情况下,declare -p services应该向您展示:
declare -a services=([0]="webserver" [1]="wistudio") # it is an array!
Run Code Online (Sandbox Code Playgroud)
并不是
declare -- services="webserver wistudio" # it is a plain string
Run Code Online (Sandbox Code Playgroud)