我无法在期望循环中编写变量:
#!/bin/bash
expect -c "
set var1 10
puts {$var1}
puts $expect_out({$var1})
foreach name { bob jim jacobo henric } {
puts {hello $name $var1}
}"
我的输出是:
# ./test
({})
hello
hello
hello
hello
所以基本上它没有扩展任何变量。 有什么想法吗?
答案 0 :(得分:1)
您应该引用'
,而不是"
!这应该完成工作:
#!/bin/bash
expect -c '
set var1 10
puts "$var1"
send_user "Confirm? (Y/n): "
expect_user -re "(.*)\n"
set var1 $expect_out(1,string)
foreach name { bob jim jacobo henric } {
puts "hello $name $var1"
}
'
输出:
10
Confirm? (Y/n): Y
hello bob Y
hello jim Y
hello jacobo Y
hello henric Y
答案 1 :(得分:0)
非常感谢,它充当了魅力。 但是当数组元素通过如下参数传递时会出现一些问题:
function a {
names=$1
expect -c '
foreach name { $names } {
puts "$name"
}
'
}
它只是打印:
$names
答案 2 :(得分:0)
你的意思是任何变量必须用单引号和双引号括起来吗?
' "$variable" '
答案 3 :(得分:0)
好吧我决定把期望代码放在一个单独的脚本test.ex中:
set interfaces [lindex $argv 0]
foreach int { $var} {
puts $int
}
当我调用期望时,它不会循环遍历字符串元素:
test.ex "string1 string2"
因为它只是打印:
$var
它只是忽略变量内容,并且它将变量作为字符串本身处理而不扩展它,是否有办法让它工作?
答案 4 :(得分:0)
我明白了! 只需要删除需要循环的变量周围的大括号{}:
set interfaces [lindex $argv 0]
foreach int $var {
puts $int
}