2015-11-04 64 views
0

我想以編程方式將靜態內容(如用戶名或工作路徑)替換爲小佔位符。Bash:動態替換perl

有沒有在bash的可能性,我可以動態地執行我的Perl更換狀態,如:

GROUPNAME="$(id -g -n $USER)" 
perl -pi -e 's/\(PLACEHOLDER\)/' + "$GROUPNAME" + '/g' filepath/file 

這將是極大的好,如果我也能適應的佔位符此動力學行爲。但首先是事情。如何連接這些字符串?

+1

不知道這是一個很好的比賽,因爲它是關於變量。 –

回答

6

刪除" + "(空格和加號)。 Bash自動連接相鄰的字符串。以這種方式

echo 'hi!'t"here" # hi!there 

生成Perl代碼是唯一安全的,因爲id -g -n $USER輸出將不包含\$@/

+1

@ikegami:這個用例是安全的。也許爲了清晰起見使用'sed'。 –

+1

它來自可信輸入('id')。 –

1

你所追求的

GROUPNAME="$(id -g -n $USER)" 
perl -i -pe's/\(PLACEHOLDER\)/'"$GROUPNAME"'/g' filepath/file 

但沒有理由產生Perl代碼。這是非常容易出錯的。相反,使用下列之一:

export GROUPNAME="$(id -g -n $USER)" 
perl -i -pe's/\(PLACEHOLDER\)/$ENV{GROUPNAME}/g' filepath/file 

GROUPNAME="$(id -g -n $USER)" perl -i -pe's/\(PLACEHOLDER\)/$ENV{GROUPNAME}/g' filepath/file