有没有一种惯用的方法可以在 bash 中模拟 Perl 的菱形运算符?使用钻石运算符,

script.sh | ...

读取 stdin 作为其输入并
script.sh file1 file2 | ...

读取 file1 和 file2 作为其输入。

另一个限制是我想将 script.sh 中的 stdin 用于除输入到我自己的脚本之外的其他内容。下面的代码对上面的 file1 file2 ... 案例做了我想要的,但不适用于 stdin 上提供的数据。
command - $@ <<EOF
some_code_for_first_argument_of_command_here
EOF

我更喜欢 Bash 解决方案,但任何 Unix shell 都可以。

编辑:为了澄清,这里是 script.sh 的内容:
#!/bin/bash
command - $@ <<EOF
some_code_for_first_argument_of_command_here
EOF

我希望它像钻石运算符在 Perl 中的工作方式一样工作,但它现在只处理文件名作为参数。

编辑 2:我不能做任何事情
cat XXX | command

因为命令的标准输入不是用户的数据。命令的标准输入是我在 here-doc 中的数据。我希望用户数据进入我的脚本的标准输入,但它不能是我的脚本中调用命令的标准输入。

最佳答案

当然,这是完全可行的:

#!/bin/bash
cat $@ | some_command_goes_here

然后,用户可以不带参数(或“-”)调用您的脚本以从 stdin 或多个文件中读取,所有这些都将被读取。

如果要处理这些文件的内容(例如,逐行),可以执行以下操作:
for line in $(cat $@); do
    echo "I read: $line"
done

编辑:由于有用的评论,将 $* 更改为 $@ 以处理文件名中的空格。

关于Perl 的菱形运算符 : can it be done in bash?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/735134/

10-10 01:09
查看更多