Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何逃离<&书信电报;()perl中的习惯用法_Bash_Perl_Backticks - Fatal编程技术网

Bash 如何逃离<&书信电报;()perl中的习惯用法

Bash 如何逃离<&书信电报;()perl中的习惯用法,bash,perl,backticks,Bash,Perl,Backticks,我有一个试图执行的系统命令,但它给了我错误“语法错误:意外重定向” 正在尝试命令: datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6 datamash-ft,-g1平均值3平均值4

我有一个试图执行的系统命令,但它给了我错误“语法错误:意外重定向”

正在尝试命令:

datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6 
datamash-ft,-g1平均值3平均值4<


`datamash-ft,-g1表示3表示4\readpipe
期望将命令传递给
sh
(或Windows中的
cmd
)。 您似乎有一个
bash
命令,而不是
sh
命令。固定的:

`bash -c 'datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6'`
这并不能帮助我们避免在第二个代码段中使用
shell\u quote
,但它确实减少了以下内容:

`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6'`
use String::ShellQuote ( shell_quote );

my $qfn = '...';
my $tail_cmd = shell_quote('tail', '-n', '+2', $qfn);
my $sh_cmd = "$tail_cmd | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6";
`$sh_cmd`

BackPipe
readpipe
需要将命令传递给
sh
(或Windows中的
cmd
)。 您似乎有一个
bash
命令,而不是
sh
命令。固定的:

`bash -c 'datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6'`
这并不能帮助我们避免在第二个代码段中使用
shell\u quote
,但它确实减少了以下内容:

`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6'`
use String::ShellQuote ( shell_quote );

my $qfn = '...';
my $tail_cmd = shell_quote('tail', '-n', '+2', $qfn);
my $sh_cmd = "$tail_cmd | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6";
`$sh_cmd`

我甚至不会在这里使用进程替换。只需使用普通管道:

`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean | cut -d, -f1,2,5,6`

当命令(如
datamash
)需要在当前shell中运行时,或者当您希望将一个命令的输出提供给另一个只从命名文件而不是其标准输入读取的命令时,进程替换最为有用。这两种情况在这里都不适用。

我甚至不会在这里麻烦使用流程替换。只需使用普通管道:

`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean | cut -d, -f1,2,5,6`

当命令(如
datamash
)需要在当前shell中运行时,或者当您希望将一个命令的输出提供给另一个只从命名文件而不是其标准输入读取的命令时,进程替换最为有用。这两种情况在这里都不适用。

双引号字符串文本(包括反勾号)中只有四个特殊字符:
\
$
@
和分隔符。双引号字符串文本(包括反勾号)中只有四个特殊字符:
\
$
@
和分隔符。