这是我正在处理的代码:
function execute {
task="$1"
servername="$2"
"$task" "${servername[@]}"
}
function someOtherThing {
val=$1
echo "$val"
}
function makeNecessaryDirectory {
arr=("$@")
echo "${arr[@]}"
}
dem=(1 2 3 4 5)
execute someOtherThing 1
execute makeNecessaryDirectory "${dem[@]}"
输出:
1
1
预期产出:
1
1 2 3 4 5
如何实现这一目标?我在逻辑上没有发现任何错误。
Side question
:
总是在execute
内作为数组接收第二个参数是否安全,以便它可以处理两个相关函数,或者我应该在execute
内进行显式检查?
答案 0 :(得分:1)
正如我的评论所述
您将数组作为单个args传递给execute
,然后只传递第一个makeNecessaryDirectory
,因此$@
只是传递的单个参数,即1。
我会这样做,我已经对我已经改变的部分添加了评论。 这只是微小的变化,但希望能为你效劳。
#!/bin/bash
function execute {
task="$1"
servername="$2"
"$task" "$servername"
#No longer pass array here just pass servername as the name of array
}
function someOtherThing {
val=$1
echo "$val"
}
function makeNecessaryDirectory {
local arr=("${!1}")
#Indirect reference to the first arg passed to function which is now the
#name of the array
for i in "${arr[@]}";
do
echo "$i"
done
}
dem=(1 2 3 4 5)
execute someOtherThing 1
execute makeNecessaryDirectory 'dem[@]' #Pass the array name instead of it's contents