我有两个文件.
〜/ directory1中/ 7120599_S1.txt
hello world!
Run Code Online (Sandbox Code Playgroud)
〜/ directory2/7120599_S7.txt
bye world!
Run Code Online (Sandbox Code Playgroud)
我在寻找的Perl代码,将内容添加7120599_S1.txt到年底7120599_S7.txt.以下命令适用于Linux:
$ cat~/directory1/7120599_S1.txt >>〜/ directory2/7120599_S*.txt
新〜/ directory2/7120599_S7.txt
hello world!
bye world!
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,这在Perl中不起作用
system "cat ~/directory1/7120599_S1.txt >> ~/directory2/7120599_S*.txt"
Run Code Online (Sandbox Code Playgroud)
相反,它会在directory2被调用时创建一个新文件7120599_S*.txt.如何让Perl识别Linux通配符?
如果我们看一下POSIX shell:
对于其他重定向运算符,重定向运算符后面的单词应进行波形扩展,参数扩展,命令替换,算术扩展和引用删除.不得通过非交互式shell对单词执行路径名扩展; 交互式shell可以执行它,但只有当扩展会产生一个单词时才会这样做.
路径名扩展指的是globs *.txt.
Bash shell不会精确地遵循POSIX并且尝试更方便和合理,包括即使在非交互模式下也将路径名扩展应用于重定向目标.通常,您的交互式shell将是Bash.
但是,当您运行system命令时,这通常会运行一个更符合POSIX的更简单的shell(尽管这完全取决于您的操作系统).通常这个shell安装为/bin/sh.
如果你想要Bash,你必须明确地运行Bash,例如
system "bash", "-c", "cat ~/directory1/7120599_S1.txt >> ~/directory2/7120599_S*.txt"
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果设置POSIXLY_CORRECT环境变量,可以强制Bash跟随POSIX .