在参数中使用单引号来递归系统bash调用

HåkonHægland

我有一个Perl脚本progA.pl,需要progB.pl使用该system命令运行另一个Perl脚本但是,progB.pl已被别名化,~/.bashrc因此我需要确保它~/.bashrc在加载后运行我可以通过使用bash-lc选项来实现

对于这个问题,我考虑了以下版本的内容,以尽可能简化该问题: progB.pl

use feature qw(say);
use strict;
use warnings;
use Data::Dump qw(dd dump);

say "Received \@ARGV: " . dump @ARGV;

这里是progA.pl

use feature qw(say);
use strict;
use warnings;

use Data::Dump qw(dd dump);

my $cmd = qq(progB.pl --opt='This option contains '"'"'single'"'"' quotes');
say "cmd = " . dump($cmd);
system( "$cmd" );
say "-----";
system( 'bash -c ' . "$cmd" );
say "-----";
system( 'bash -c ' . "'$cmd'" );
say "-----";
system( "bash -c  \"$cmd\"" );

跑步

$ progA.pl

给出输出:

cmd = "progB.pl --opt='This option contains '\"'\"'single'\"'\"' quotes'"   
Received @ARGV: "--opt=This option contains 'single' quotes"  
-----   
Received @ARGV: ()  
-----   
Received @ARGV: "--opt=This"  
-----   
Received @ARGV: "--opt=This option contains single quotes"

我们看到,当progB.pl不使用进行直接运行时,此方法效果很好bash -c当我bash -c用来运行命令时,这三种选择均无法正常工作。

如何progB.pl使用包含单引号的参数并同时使用using运行bash -c

Hynek -Pichi-他走了出去

首先应该避免这种疯狂的报价,但是如果您坚持要使用system ARRAY版本,则应该至少避免一级的报价

my $cmd = q{progB.pl --opt='This option contains '"'"'single'"'"' quotes'};
system( qw(bash -c), $cmd );

它使它仅是疯狂程度的一种引用。

my $option = q{This option contains 'single' quotes} =~ s/'/'"'"'/gr; # '
my $cmd = qq{progB.pl --opt='$option'};
system( qw(bash -c), $cmd );

在那里你可以做一些简单的帮手

sub sq ($) { "'" . $_[0] =~ s/'/'"'"'/gr . "'" } # "

my $option = q{This option contains 'single' quotes};
my $cmd = qq{progB.pl --opt=@{[sq $option]}};
system( qw(bash -c), $cmd );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 bash 脚本中使用双引号和单引号来调用程序

来自分类Dev

尝试在单引号Bash中使用变量

来自分类Dev

在Bash中在双引号和单引号中使用反引号的区别

来自分类Dev

使用bash循环运行在命令行中使用单引号的程序,其中单引号使bash脚本的意图无效

来自分类Dev

如何在命令行参数中使用popen包含单引号和双引号?

来自分类Dev

如何在C#控制台参数中使用单引号而不是双引号?

来自分类Dev

如何在MessageFormat中使用单引号

来自分类Dev

在搜索栏中使用单引号

来自分类Dev

在MATLAB中使用单引号的计算符号

来自分类Dev

在Python中使用单引号的While循环

来自分类Dev

在内联HTML中使用包含单引号的字符串作为Javascript参数

来自分类Dev

如何在MySQL查询中使用VB.NET参数连接单引号?

来自分类Dev

如何在bash中使用单引号引起来的撇号?

来自分类Dev

使用单引号和无引号的函数调用

来自分类Dev

调用单引号的函数

来自分类Dev

如何在Clojure宏中使用单引号或双引号?

来自分类Dev

如何在JavaScript中使用单引号和双引号

来自分类Dev

bash:如何在select中使用带引号的参数

来自分类Dev

具有globlob值的Bash脚本单引号参数

来自分类Dev

当单击按钮时,如何在onclick事件中使用单引号来在计算器中显示某个单词?

来自分类Dev

在find命令中使用“单引号”或不使用单引号有什么区别

来自分类Dev

在逗号上分割字符串,忽略单引号,并在单引号中使用逗号

来自分类Dev

当我在PHP for SQL Management Studio中使用单引号时如何添加单引号

来自分类Dev

如何在另一个单引号短语中使用awk的单引号?

来自分类Dev

Java:如何在递归调用中使用原始参数递归调用我的方法

来自分类Dev

如何在单引号内使用单引号从ruby控制器运行bash脚本

来自分类Dev

使用LIKE查询在文本中使用单引号的Ormlite异常

来自分类Dev

在Shell脚本中使用单引号(')-RSYNC出现问题

来自分类Dev

如何在单引号字符串中使用变量?

Related 相关文章

  1. 1

    在 bash 脚本中使用双引号和单引号来调用程序

  2. 2

    尝试在单引号Bash中使用变量

  3. 3

    在Bash中在双引号和单引号中使用反引号的区别

  4. 4

    使用bash循环运行在命令行中使用单引号的程序,其中单引号使bash脚本的意图无效

  5. 5

    如何在命令行参数中使用popen包含单引号和双引号?

  6. 6

    如何在C#控制台参数中使用单引号而不是双引号?

  7. 7

    如何在MessageFormat中使用单引号

  8. 8

    在搜索栏中使用单引号

  9. 9

    在MATLAB中使用单引号的计算符号

  10. 10

    在Python中使用单引号的While循环

  11. 11

    在内联HTML中使用包含单引号的字符串作为Javascript参数

  12. 12

    如何在MySQL查询中使用VB.NET参数连接单引号?

  13. 13

    如何在bash中使用单引号引起来的撇号?

  14. 14

    使用单引号和无引号的函数调用

  15. 15

    调用单引号的函数

  16. 16

    如何在Clojure宏中使用单引号或双引号?

  17. 17

    如何在JavaScript中使用单引号和双引号

  18. 18

    bash:如何在select中使用带引号的参数

  19. 19

    具有globlob值的Bash脚本单引号参数

  20. 20

    当单击按钮时,如何在onclick事件中使用单引号来在计算器中显示某个单词?

  21. 21

    在find命令中使用“单引号”或不使用单引号有什么区别

  22. 22

    在逗号上分割字符串,忽略单引号,并在单引号中使用逗号

  23. 23

    当我在PHP for SQL Management Studio中使用单引号时如何添加单引号

  24. 24

    如何在另一个单引号短语中使用awk的单引号?

  25. 25

    Java:如何在递归调用中使用原始参数递归调用我的方法

  26. 26

    如何在单引号内使用单引号从ruby控制器运行bash脚本

  27. 27

    使用LIKE查询在文本中使用单引号的Ormlite异常

  28. 28

    在Shell脚本中使用单引号(')-RSYNC出现问题

  29. 29

    如何在单引号字符串中使用变量?

热门标签

归档