LINUX.ORG.RU

Убери одинарные кавычки вокруг Enter the name: и замени двойные вокруг всей команды на одинарные.

anonymous
()
xfce4-terminal -x bash -c 'echo "Enter the name:"; read EXP; echo "$EXP"; read'
Kroz ★★★★★
()
Ответ на: комментарий от Deleted

read -p «Энтер зе нэйм: » exp && echo $exp

Это не решит его проблемы.

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

Кажется, я понял, в чём проблема: в изначальном виде bash сначала интерпретирует строку в двойных кавычках, подставляя туда пустое значение несуществующей переменной, и только потом передаёт её новому интерпретатору. По сути, надо только исправить двойные кавычки на одинарные.

Спасибо всем отписавшимся.

meliafaro ★★★★★
() автор топика

У тебя $EXP разворачивает не тот шелл, а этот.

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

По сути, надо только исправить двойные кавычки на одинарные.

Это может помешать вставить действительно если надо значение от существующей переменной. Уж сколько твердили миру, если вы хотите передать спец символ для дальнейшей обработки, а пока запретить его интерпретацию как спец-символа, то удобнее его экранировать, а не танцы с кавычками. Кавычек всего две и обе могут понадобиться.

PROMPT='Enter the name:'

bash -c "read -p '$PROMPT' EXP; echo \$EXP"
PS: и на ответ намекала раскраска парсера ЛОР. Видите разницу? Где зелёная строка и где лиловая.

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

С экранированием хуже читается. Если возможно, лучше кавычки.

Это так, пока не понадобятся таки вставка переменных и обе кавычки, казалось бы ерунда, а всё переписывать. Добавьте в prompt кавычки и при echo, скажем надпись Вы ввели "..."

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

А что можно почитать по sh, чтобы понять логику? Почему иногда хватает одного экранирующего слэша, иногда нужны два, иногда даже четыре. Я вот такие конструкции могу генерировать исключительно методом тыка, и насколько я могу судить, далеко не только я.

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

Ставишь обратный слеш и следующий символ перестаёт быть специальным (в однинарных кавычках это не работает). Вот и всё, никакой магии.

PROMPT=Enter something
xfce4-terminal -x bash -c echo "read -p '$PROMPT' EXP; echo Введено \\\"\$EXP\\\""

Что передаётся как строковой аргумент башу после экранирования и подстановки переменных:

read -p 'Enter something' EXP; echo Введено \"$EXP\"
melkor217 ★★★★★
()
Ответ на: комментарий от meliafaro

Логика не сложная. Для каждого текущего sh-а достаточно одного экранирования, но сам символ \ при экранировании есть \\, вот и получается: экранирование \ и " преобразуется в три подряд \\\ и кавычку.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.