LINUX.ORG.RU

Ой мой мозг....

anonymous
()
Ответ на: комментарий от i_gnatenko_brain

Как получить строку "./user.sh 234$ 123 234$"? Для передачи в expect через $argv.

Сейчас строки с «$» обрамляются кавычками.

kdo
() автор топика
Ответ на: комментарий от i_gnatenko_brain

в expect нет $@

в bash мне не нужно получать все аргументы

нужно передать строку без изменений с $ из bash в expect

kdo
() автор топика

А зачем их убирать? Можно нормальный пример, где это небходимо?

$ ./test.sh '10$'
+ echo '10$'
10$
$ ./test.sh 10$
+ echo '10$'
10$
$ cat test.sh 
#!/bin/bash -x 

echo $@
$ 
drake
()
Ответ на: комментарий от kdo

Она итак передаётся без кавычек, а в трейсе set -e режима специально экранируется для удобства копирования.

Adjkru ★★★★★
()
Ответ на: комментарий от Adjkru

user.sh:

#!/usr/bin/expect -f 

set s1 [lrange $argv 0 0]
set s2 [lrange $argv 1 1]
set s3 [lrange $argv 2 2]
set timeout -1

spawn echo $s1 $s2 $3;

exit 0

+ str01=123

+ str02='234$'

+ echo 123

123

+ echo '234$'

234$

++ echo '234$'

+ ./user.sh '234$' 123 '234$'

spawn echo {234$} 123 {234$}

kdo
() автор топика
Ответ на: комментарий от kdo

Дело-таки в экспекте, а не в шелле.

$ ./test.expect 123\$ 12 123\$
spawn echo {123$} 12 {123$}

Но если вместо lrange использовать более логичный lindex, то всё начинает работать как и положено.

$ cat > test.expect
#!/usr/bin/expect -f

set s1 [lindex $argv 0]
set s2 [lindex $argv 1]
set s3 [lindex $argv 2]
set timeout -1

spawn echo $s1 $s2 $s3

exit 0
$ ./test.expect 123\$ 12 123\$
spawn echo 123$ 12 123$
unterwulf
()

Там нет кавычек, тебе показалось. Я серьёзно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.