我有两个数组如下:
Array1 - ( val1 val2 val3 val4 val5 )
Array2 - ( user1 user2 user3 user4 user5 )
array1
中的每个值都有一个函数。例如:Functionval1
,Functionval2
,Functionval3
...
现在我需要一个shell脚本,它将读取array1
并调用相应的函数,并将Array2
的相应值传递给函数。
Ex:从val1
读取Array1
,val1
来电Functionval1
并将user1
传递给该函数。
你能帮助我建立逻辑吗?
此致 希瓦。
答案 0 :(得分:1)
你可以遍历数组索引并分别调用每个函数及其参数。
Array1=( val1 val2 val3 val4 val5 )
Array2=( user1 user2 user3 user4 user5 )
for i in ${!Array1[@]}; do
"Function${Array1[$i]}" "${Array2[$i]}"
done
考虑这样的测试脚本:
#!/bin/ksh
Functionval1 (){
echo "this is a test $1"
}
Functionval2 (){
echo "this is another test $1"
}
Array1=( val1 val2 )
Array2=( user1 user2 )
for i in ${!Array1[@]}; do
"Function${Array1[$i]}" "${Array2[$i]}"
done
输出:
this is a test user1
this is another test user2
您也可以重写脚本来执行相同的操作,而不使用${!...[@]}
语法。
Array1=(val1 val2)
Array2=(user1 user2)
arr_len=${#Array1[@]}
let arr_len--
for i in $(seq 0 $arr_len); do
"Function${Array1[$i]}" "${Array2[$i]}"
done
请注意,您必须针对像zsh
这样的shell调整此值,以便将其第一个数组元素编入索引1
。
答案 1 :(得分:0)
#!/bin/bash
# functions defined here, e.g Functionval1 etc.
#....
# Array declarations
declare -a Array1=( val1 val2 val3 val4 val5 )
declare -a Array2=( user1 user2 user3 user4 user5 )
# get length of Array1
array1length=${#Array1[@]}
for (( i=0; i<${#Array1[@]}; i++ ));
do
function_to_run="Function${Array1[$i]}" # E.g. function_to_run becomes Functionval1
function_parameter=${Array2[$i]} # E.g. function_parameter becomes user1
$function_to_run $function_parameter # E.g. Functionval1 user1
done
您可以在不声明function_to_run
和function_parameter
的情况下执行此操作,但在使用它时更容易理解。
答案 2 :(得分:0)
Korn Shell版本:
#!/bin/ksh
# functions defined here, e.g Functionval1 etc.
set -A Array1 val1 val2 val3 val4 val5
set -A Array2 user1 user2 user3 user4 user5
# get length of Array1
Array1length=${#Array1[@]}
i=0
while (( $i < $Array1length ))
do
function_to_run="Function${Array1[$i]}"
function_parameter=${Array2[$i]}
$function_to_run $function_parameter
i=$i+1
done