Bash — Присвоение значений существующей переменной Новой переменной. Новые значения переменных не возвращают присвоенное значение

#bash #shell #variables #sh

Вопрос:

Я хочу присвоить значение существующей переменной новой переменной в моем скрипте Bash. Проблема заключается в том, что как только новой переменной присваивается значение существующей переменной, она возвращает none вместо возврата существующего значения переменной. (см. Код ниже):

 VAR1="Hello World" VAR2="Let's concatenate"  VAR1 ="$MyVar" # assigning to a new variable echo "$VAR1" echo "$MyVar" # This is the issue --gt; no value returned (intention is to return "Hello World")  

Вывод для этой команды (эхо «$myVar») является:

  • VAR1=
  • эхо «

введите описание изображения здесь

Комментарии:

1. Ваш снимок экрана предполагает , что вы выполняете VAR1="$MyVar" , а не VAR1 ="$MyVar' . (И то, и другое неверно, но здесь есть несоответствие.)

Ответ №1:

Вы не определяете новую переменную с именем MyVar . Вы добавляете пустую строку, полученную в результате расширения несуществующей переменной, к значению VAR1 .

Ты хочешь

 MyVar=$VAR1  

чтобы получить желаемый результат.


Пример того, что = делает:

 $ x=foo $ echo "$x" foo $ x =bar $ echo "$x" foobar  

Комментарии:

1. Большое спасибо за разъяснения @chepner

2. Означает ли это, что если я объединю пустую строку (например: myVar) с существующей строкой, имеющей некоторое значение, она не вернет ничего? Как в SQL, когда добавление NULL к значению возвращает NULL?

3. @enigma6205 Нет, это не так. Добавление пустой строки к переменной оставит переменную неизменной. В вашем исходном сообщении $MyVar никогда и нигде не задано, следовательно, оно пустое.

4. x=foo; x =""; echo "$x" будет вывод foo . Это легко проверить.