在ssh shell脚本中迭代本地Map

时间:2016-11-11 04:54:30

标签: shell unix ssh ksh

我有一个testFile,有两个参数用管道分隔。

vi testFile
1|A
2|B
3|C
4|D
5|E

我正在创建地图并在for循环中运行它,下面正在运行:

while IFS='|' read -r NUM CHAR
do
        export MAP[$NUM]=$CHAR
done < testFile

for i in ${!MAP[@]}
do
        echo "$i  ${MAP[$i]}"
done

但是当我要去任何机器并运行循环时,获取 ./test.sh[11]: syntax error at line 20: '!' unexpected

以下无效

ssh  someUser@someHost << EOF

for i in ${!MAP[@]}
do
        echo "$i  ${MAP[$i]}"
done

EOF

如何在ssh机器中使用MAP

注意testFile不是固定文件,我从sql查询创建这个文件,每次运行都会有所不同。

1 个答案:

答案 0 :(得分:0)

你可以试试这个;

#!/bin/ksh
while IFS='|' read -r NUM CHAR
do
        export MAP[$NUM]=$CHAR
done < testFile

for i in "${!MAP[@]}"
do
        echo "$i  "${MAP[$i]}""
done

ssh  someUser@someHost <<EOF
eval `typeset -p MAP`

for i in "\${!MAP[@]}"
do
        echo "\$i  "\${MAP[\$i]}""
done

EOF

eval:评估服务器端

typeset:允许修改变量的属性。

\ $:转义变量

测试:

$ ksh test.ksh
1  A
2  B
3  C
4  D
5  E
user@localhost's password: 
1  A
2  B
3  C
4  D
5  E