Правильный синтаксис для интерполяции значений массива будет
array set param ${my_file[@]}
без !
, но при этом получается
array set param a.txt b.txt c.txt d.txt e.txt
Однако синтаксис Expect для создания массивов выглядит как
array set param {one one.txt two two.txt}
с чередующимися ключами и значениями (больше похоже на ассоциативный массив, чем просто список значений). Но тогда вы все равно не можете использовать оболочку for
l oop внутри сценария Expect; язык использует совершенно другой синтаксис (Expect основан на TCL, а не на скрипте оболочки).
Возможно, вы ищете что-то вроде
/usr/bin/expect <<EOF
set timeout -1
spawn sftp $sftp_option $user@$host
expect "Password:"
send "$pswd\r"
expect "sftp>"
foreach arg {${my_file[@]}} {
send "mget $arg*\r"
expect "sftp>"
}
send "bye\r"
EOF
, где я набрал правильный TCL l oop Синтаксис из Передать bash массив для ожидания сценария