繁体   English   中英

在ssh shell脚本中迭代本地Map

[英]Iterate over local Map in ssh shell script

我有一个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

但是当我要ssh到任何机器并运行循环时,得到./test.sh[11]: syntax error at line 20: '!' unexpected ./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查询创建这个文件,每次运行都会有所不同。

你可以试试这个;

#!/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM