Причина, по которой bash не оценивается $size
, заключается в том, что вы заключили его в одинарные кавычки ('
). Это становится более очевидным, если вы используете синтаксис $(...)
вместо обратных галочек:
messages=$( perl -e 'print "X" x $size' )
Принцип состоит в том, что все внутри одинарных кавычек не затрагивается bash (после разделения слов в конечном итоге удаляются только кавычки), в то время как вещи в двойных кавычках получают различные расширения оболочки (даже без кавычек).
Таким образом, Perl здесь получает $size
и может только попытаться оценить это как переменную perl.
Как уже сказал другой Диего, замена кавычек может помочь:
messages=$( perl -e "print 'X' x $size" )