2016-11-19 4 views
0

Я хочу добавить значение переменной в строковое содержимое, указанное в '' из-за специальных символов внутри. Например:Добавить значение переменной в строку

a=500 
str='#Test 
d-i partman-auto/expert_recipe string \ 
boot-root :: \ 
    $a 10000 1000000000 ext4 \ 
    $primary{ } $bootable{ } \ 
    method{ format } format{ } \ 
    use_filesystem{ } filesystem{ ext4 } \ 
    mountpoint{/} \ 
. 
' 

К сожалению, я не могу работать со значением $ а внутри «». Это возвращает мне $ a против его значения = 500

+0

Используйте '" 'вместо' ' 'для значения переменных будет расширен – dawg

ответ

1

Вам нужно оставить «внутри» одинарных кавычек.
закрыть и повторно открыть одиночные кавычки:

a=500 
primary=one 
bootable=two 
str='#Test 
d-i partman-auto/expert_recipe string \ 
boot-root :: \ 
    '"$a"' 10000 1000000000 ext4 \ 
    '"$primary"'{ } '"$bootable"'{ } \ 
    method{ format } format{ } \ 
    use_filesystem{ } filesystem{ ext4 } \ 
    mountpoint{/} \ 
. 
' 
echo "$str" 
+1

+1. Другими словами, ключевым моментом является то, что, несмотря на ожидание OP, это не фактически «строка». В Bash '' ... ''и' "..." 'являются просто обозначениями для отключения определенных специальных значений в пределах указанного фрагмента исходного текста, аналогично тому, как' \ 'отключает специальное значение в следующем символе источника. '' foo'', '" foo "' и '' f'o "o" 'все просто означает' foo'. – ruakh

+0

@ruakh Это точно, спасибо. – sorontar

0

варианты:

Interpolate все $ переменные (с использованием ") - и побег любые долларовые знаки, которые вы хотите сохранить:

EXPAND_THIS=100 
echo " 
$EXPAND_THIS 
\$DONT_EXPAND_THIS 
" 

Или интерполировать нет$ переменных (с использованием ') - и начать новую, интерполированную, строку всякий раз, когда вы сделать хотят интерполировать переменный:

echo ' 
'$EXPAND_THIS' 
$DONT_EXPAND_THIS 
' 

Ближайшие в кавычках переменных, которые вы хотите интерполированными, может обеспечить безопасность в некоторых ситуациях (хотя я не могу себе придумать пример):

echo 'blah 
blah 
'"$EXPAND_THIS"' 
$DONT_EXPAND_THIS 
' 
Смежные вопросы