#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
. Это легко проверить.