0
我一直在使用Windows TCL外壳,但同时在bash的协助有人发现了一个奇怪的问题:无法打印数组中的Bash shell
export SERVER_HOSTNAME=server1
export USERNAME=root
export PASSWORD=pswd
export LOG_FILE="a.log"
export LOG_PATH="$env(LOG_PATH)"
export log_search_pattern="Filterable_data"
/usr/bin/expect<<EOF
set lineNum {}
set SERVER_HOSTNAME "$env(SERVER_HOSTNAME)"
set USERNAME "$env(USERNAME)"
set PASSWORD "$env(PASSWORD)"
set LOG_FILE "$env(LOG_FILE)"
set log_search_pattern "$env(log_search_pattern)"
set timeout -1
spawn ssh "[email protected]$SERVER_HOSTNAME"
expect "assword:"
puts "$expect_out(buffer)"
parray expect_out
send "$PASSWORD\r"
expect "#"
puts "$expect_out(buffer)"
send "grep -n $log_search_pattern $LOG_PATH/$LOG_FILE|tail -1\r"
expect eof
EOF
现在的问题是,下面的命令:
puts "$expect_out(buffer)"
prints -> (buffer)
但是打印整个缓冲区内容
parray expect_out
我还尝试添加下列行:
set a(1) val1
set a(2) val2
puts $a(1)
puts $a(2)
parray a
印刷:
(1)
(2)
a(1) = val1
a(2) = val2
我尝试各种组合,以获得看跌美元(1)打印VAL1但它总是打印(1)。
这样做的正确方法是什么?
谢谢Etan - 但它甚至没有引号:例如'放$ a(1)'也会打印“(1)” - 以任何方式解决这个问题。 – BabyGroot
我对这个评论感到困惑。围绕变量扩展的引号不是问题。 *缺乏围绕heredoc标记的引号是问题所在。整个heredoc正受到shell的各种扩展。你不希望这样引用heredoc标记......或者在heredoc中用反斜杠对每个'$','''''''等等进行转义 –
@ user1570408,同样的问题也会影响你的变量'从shell传入,期望:shell没有定义'$ env'变量,所以希望你有'$ SERVER_HOSTNAME ==“(SERVER_HOSTNAME)”'等 –