Команда Windows echo не может отобразить заданную пользователем переменную
-
19-09-2019 - |
Вопрос
Что я сделал, чтобы испортить свою командную оболочку?Windows XP Pro, откройте окно cmd и выполните:
C:\>set tt = name
C:\>set tt
tt = name
C:\>echo %tt%
%tt%
C:\>echo %time%
14:13:28.67
Команда echo по какой-то причине не работает.Я могу просто отлично отображать встроенные переменные.Попробовал это на другом компьютере, и это работает так, как ожидалось
Решение
В set
команда не содержит пробелов.Правильный синтаксис был бы следующим:
set tt=name
То, что вы сделали в своем примере, - это установили переменную окружения tt<space>
.Имея это в виду, вы можете попробовать это:
echo %tt%
и посмотрите на свой результат.
Другие советы
Вы пробовали устанавливать переменную без пробела между равными?(установить tt=имя)
Наиболее одобренный ответ здесь, принятый давным-давно, утверждает, что:
"Тот
set
команда не занимает пробелов."
Но это неверно:В %tt %
переменная действительно работает:Его можно установить и ссылаться на него.(Несмотря на это является сбивает с толку.)
Воспроизведенная проблема:
Действительно, на моем Win7:
C:\>set os
OS=Windows_NT
C:\>set tt = name
C:\>set tt2= name
C:\>set tt3=name
C:\>set tt
tt = name
tt2= name
tt3=name
Я попробовал и получил:
C:\>echo "%os%"
"Windows_NT"
C:\>echo "%tt3%"
"name"
C:\>echo "%tt2%"
" name"
C:\>echo "%tt%"
"%tt%"
Разрешенные дела:
Интуитивно ожидаемая переменная %tt%
не установлен. Но %tt %
устанавливается вместо:
C:\>echo "%tt %"
" name"
Более того, с пробелом в конце значения, set tt4 = name
:
C:\>echo "%tt4 %"
" name "
Выводы:
В set
команда не выполняет trim()
:
- Пробел перед "=" включается в
var_name
. - Пробел после "=" включается в
var_value
. - Пробел в конце
var_value
входит в него.
С другой стороны:
- Пробел в начале
var_name
не включен в него, что довольно нормально для аргументов командной строки в целом.