Вывод переданной команды в переменную не работает

Вывод переданной команды в переменную не работает

Когда я пробую следующее, проблем не возникает:

$ date '+%y%m' | sed 's/.\(.*\)/\1/'
906

Но когда я пытаюсь сохранить его в переменной, кажется, что ничего не сохраняется:

$ dd=`date '+%y%m' | sed 's/.\(.*\)/\1/'`
$ echo "$dd"

Я знаю, что могу получить тот же результат, не используя sed:

$ dd=`date '+%y%m'`
$ echo ${dd: -3}
906

но мне интересно, почему это не работает с sed.

решение1

Не используйте команды в качестве имени переменной. ddЕсли ваш диск уничтожитель, посмотрите man ddи попробуйте другое имя переменной или что-то вроде этого:

d=`date '+%y%m' | sed 's/.\(.*\)/\1/'`
echo $d

Возможно, эта часть руководства bashтакже будет полезна:

man bash | sed -n '/^DEFINITIONS/,/^SHELL GRAMMAR/p' | less

Связанный контент