我一直在嘗試爲基準程序創建一個字符串數量可變的字符。我想用這個來建立我的消息字符串:如何在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