perl system()命令

时间:2016-03-07 16:30:38

标签: perl system

以下命令和问题仅仅是为了找出正确的语法,所以请不要寻求它背后的任何深层目的,而是如果你知道正确的语法,这将对我有很大的帮助。

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

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

这个命令很好地输出:

file.bed
file.bed
file

我想添加另一个echo,将后缀“.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}")';

因此,由于某种原因,后缀删除[%。*]在system()中运行正常,但{//}替换失败。

有什么想法吗?

1 个答案:

答案 0 :(得分: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", "...")'