我一直在尝试为基准程序创建一个字符串数量可变的字符。我想用这个来建立我的消息字符串:如何在Bash中使用shell输出(反引号)创建一个字符串?
messages=`perl -e 'print "X" x $size'`
的目标是创建人物的动态数量。例如,如果$ size是1,那么将会有一个X.如果size是5,那么消息将是XXXXX。这似乎不起作用,输出是空白的。
我误会了什么吗?
我一直在尝试为基准程序创建一个字符串数量可变的字符。我想用这个来建立我的消息字符串:如何在Bash中使用shell输出(反引号)创建一个字符串?
messages=`perl -e 'print "X" x $size'`
的目标是创建人物的动态数量。例如,如果$ size是1,那么将会有一个X.如果size是5,那么消息将是XXXXX。这似乎不起作用,输出是空白的。
我误会了什么吗?
是$size
不被bash的评估的原因是你在单引号它('
) 。如果使用$(...)
语法,而不是反引号这变得更加明显:
messages=$(perl -e 'print "X" x $size')
的原则是,单引号内的一切不被bash的触摸(仅报价是分词后,终于剥离),而在事双引号可以获得各种shell扩展(甚至没有引号)。
因此,Perl在这里获得$size
,只能尝试将其评估为perl变量。
正如已经被其他迭戈说,交换左右报价的迹象可以帮助:
messages=$(perl -e "print 'X' x $size")
谢谢,我学到了很多东西。 :) – 2011-06-06 11:57:44
尝试:
messages=`perl -e 'print "X" x shift' $size`
你需要在bash评估$size
,而不是在Perl。通过这种方式,您可以将它作为脚本的命令行参数传递给Perl,并使用单个shift
获取Perl。
谢谢你的工作,以及另一张贴。 – 2011-06-06 11:43:24
很好的解决方案,以避免shell引用地狱 – 2011-06-06 14:10:48
另一种可能的解决方案:
messages=`perl -e "print \"X\" x $size"`
,甚至与报价打:
messages=`perl -e "print 'X' x $size"`
谢谢这个人也工作。 – 2011-06-06 11:43:35
Perl的引用运算符在这里很方便(对于更复杂的脚本):'msg = $(perl -e“print q(X)x $ size”) – 2011-06-06 14:10:16
嘛,恕我直言调用perl
和awk
为简单的字符串处理hackish。像这样一个简单的任务可以直接完成:
in='X' out='' x=5
for ((i = 0; i < x; ++i)); do out+="$in"; done
我以为你知道谷歌的一切。 – Bastardo 2011-06-06 11:36:11
你的问题是与Perl代码,而不是反引号。 – 2011-06-06 11:37:11
我希望!我刚刚意识到这个问题与$ size有关,但我似乎无法逃脱它,所以脚本意识到它是一个bash变量,并不意味着在反引号中。 – 2011-06-06 11:37:22