我一直在尝试为基准程序创建一个字符数可变的字符串。我正在尝试使用它来设置我的消息字符串:
messages=`perl -e 'print "X" x $size'`
目标是创建动态数量的字符。例如,如果$ size为1,那么将有一个X.如果size为5,则消息将为XXXXX。这似乎不起作用,输出是空白的。
我误解了什么吗?
答案 0 :(得分:2)
bash未评估$size
的原因是您将其括在单引号('
)中。如果您使用$(...)
语法而不是反引号,则会更加明显:
messages=$( perl -e 'print "X" x $size' )
原则是单引号内的所有内容都没有被bash触及(只有引号在单词拆分后才会被删除),而双引号中的内容会得到各种shell扩展(不含引号)。
因此Perl在这里获得$size
并且只能尝试将其评估为perl变量。
正如其他迭戈所说,交换引号可以提供帮助:
messages=$( perl -e "print 'X' x $size" )
答案 1 :(得分:1)
尝试:
messages=`perl -e 'print "X" x shift' $size`
您需要在bash中评估$size
,而不是在perl中。这样您就可以将它作为命令行参数传递给脚本,并在Perl中使用单个shift
获取。
答案 2 :(得分:0)
另一种可能的解决方案:
messages=`perl -e "print \"X\" x $size"`
甚至,玩引号:
messages=`perl -e "print 'X' x $size"`
答案 3 :(得分:0)
嗯,恕我直言呼叫perl
和awk
进行简单的字符串处理是hackish。像这样的简单任务可以直接完成:
in='X' out='' x=5
for ((i = 0; i < x; ++i)); do out+="$in"; done