【问题标题】:string replacement within perl system() commandperl system() 命令中的字符串替换
【发布时间】:2016-03-07 16:30:37
【问题描述】:

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

我有以下几点: *在这里使用 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}")';

因此,由于某种原因,后缀删除 [%.*] 在 system() 中工作得很好,但 {//} 替换失败。

有什么想法吗?

【问题讨论】:

  • @toolic,system 不使用tcsh,所以这是一个相当无用的声明。

标签: perl system


【解决方案1】:
perl -e '$i="file.bed"; system("...")'

简称

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2012-09-21
    • 2017-03-06
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多