LINUX.ORG.RU

А поясните по bash'у...

 ,


0

3

...почему отличаются в работе эти варианты:

rain@elitebook:~$ /bin/bash -c 'var=bla ; echo $var'
bla
rain@elitebook:~$ /bin/bash -c "var=bla ; echo $var"

rain@elitebook:~$

Т.е., я понимаю разницу между одинарными, двойными и косыми кавычками внутри скрипта, но ведь в данном случае кавычки просто ограничивают строку, которая передается на вход /bin/bash.

Ну и еще тогда: там же, в man bash сказано, что то, что идет после кавычек, передается как аргументы в строку, начиная с нуля. Такой вариант работает:

rain@elitebook:~$ export VAR='-1 -s' ; /bin/bash -c 'echo ls $0 $1' "$VAR"
ls -1 -s

А как то же самое сделать для сессии скрина?

export VAR='-1 -s' ; screen -S 7161.elitebook_mainscreen -X screen /bin/bash -c 'echo ls $0 $1 ; read' "$VAR"

В созданном терминале вижу только ls без аргументов.

★★★★★

в данном случае в двойных ковычках $var уже интепретировался _перед_ подачей и соответственно вывелось просто echo, а вот так echo \$var должно работать.

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

dmitrys ~ $ /bin/bash -c «var=bla ; echo $var» bla dmitrys ~ $ /bin/bash -c 'var=bla ; echo $var' bla

Это на cygwin.

На Debian то же что, и у ТС.

Disova ()
Ответ на: комментарий от Spoofing

Гм, таки да, логично. Что забавно, подобное экранирование я и сам использую в обратном варианте - при одинарных кавычках.

Суть - в строку для запуска ethminer (24-я) хочу впихнуть «снаружи» свои параметры - http://pastebin.ubuntu.com/14410465/, а так как они нужны только на одной машине - тело скрипта хочется везде держать одинаковое.

YAR ★★★★★ ()
Последнее исправление: YAR (всего исправлений: 1)

Note that you cannot transport environment variables from the invoking shell to the application (emacs in this case), because it is forked from the parent screen process, not from the invoking shell.

:(

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

О! Спасибо. Буду знать о такой возможности. А вообще уже переделал скрипт на двойные кавычки - http://pastebin.ubuntu.com/14410836/ - раз уж так проще будет взаимодействовать между шеллами

YAR ★★★★★ ()

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

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