2016-03-07 139 views
0

下面的命令和问题仅仅是为了弄清楚正确的语法,所以请不要追求它背后的任何深层次的目的,而是如果你知道这将是适当的语法对我很有帮助。perl系统中的字符串替换()命令

我有以下几点: *在这里使用perl -e来模仿一个调用system()命令来执行unix命令的perl文件。

perl -e '$i="file.bed"; system("j=$i; echo ${i} ;echo \${j}; echo \${j%.*};")'; 

这个命令很好地输出:

file.bed 
file.bed 
file 

我想补充另一个回声,它取代了后缀 “.bed” 的后缀 “.bam” 我想:

perl -e '$i="file.bed"; system("j=$i; echo ${i} ;echo \${j}; echo \${j%.*}; echo \${j/.bed/.bam}")'; 

,但我得到:

file.bed 
file.bed 
file 
sh: 1: Bad substitution 

同样适用于:[%*]

perl -e '$i="file.bed"; system("j=$i; echo ${i} ;echo \${j}; echo \${j%.*}; echo \${j\/.bed\/.bam}")'; 

所以,出于某种原因,后缀拆除工程就好系统内(),但{//}替换将失败。

任何想法?

+1

@toolic,'system'不使用'tcsh',所以这是一个相当无用的陈述。 – ikegami

回答

5
perl -e '$i="file.bed"; system("...")' 

是短期的

perl -e '$i="file.bed"; system("/bin/sh", "-c", "...")' 

${j/.bed/.bam}sh支持。使用

perl -e '$i="file.bed"; system("bash", "-c", "...")'