如何将多行文件的内容作为参数传递?

Dan*_*lan 2 command-line bash io-redirection xargs files

我正在尝试运行一个带-t参数的脚本。这个参数代表文本,并且值——理论上——可以是多行的。在命令行上,我假设 Here Document 可以工作,但我不喜欢在命令行上输入长内容。另外,我希望这个文件能够持久化,以便我以后可以再次传递它。

我不知道该怎么做;如果 I cat foo | xargs echo,它打印为一行。这修复了:cat foo | xargs -d='' echo,但它让我觉得有些我不明白的东西会根据其内容改变文档的空白或一般结构。

如何将多行文件作为参数传递而不必担心特殊字符或更改其格式?

cas*_*cas 5

  1. 为什么不直接传递一个文件名呢?如果脚本尚不知道如何处理文件名,请对其进行修改(例如,将所有未知参数视为文件名,和/或-f为输入文件名添加选项)。请记住添加错误检查代码并在文件名不存在或由于权限等原因无法读取时做出适当的响应。

  2. 引用你的论点。例如-t "$(cat foo)"

  • @DanielKaplan *任何*文件内容?不。 (1) `"$(cat foo)"` 从最后删除所有换行符。(2) 在 Bash 中,您不能以这种方式传递 NUL 字节。但是由于您的脚本需要 *text*,因此您不应传递 NUL 字节(通过 [定义](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403)文本文件不包含无)。(3) `参数列表太长`是可能的。// 传递任意内容的正确方法不是通过命令行。该脚本应该使用一个文件:stdin 或命名文件(在命令行、环境、配置或硬编码中指定的名称)。 (3认同)