我有一个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查询创建这个文件,每次运行都会有所不同。
答案 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