Shell glob - 用文件内容替换文件路径 arg

Shell glob - 用文件内容替换文件路径 arg

curl命令中,有--data一个选项,当选项值以符号为前缀时,它会替换文件内容,@例如,

curl -X POST --data @abc.json hostaddr.com

abc.json文件内容作为 post 请求的正文发送。如果帖子正文很长/多行,则此选项很方便。

我如何在任何 Linux shell 中zshell或可能在任何 Linux shell 中执行此操作?是否有一个glob pattern/ prefix operator,会将以下字符串视为文件路径并将该字符串替换为文件内容?

答案1

在大多数情况下,这将是重定向运算符( <):

$ tr 'a' 'b' /path/to/file  ## fails because `tr` works on streams
tr: extra operand ‘file’
Try 'tr --help' for more information.
$ tr 'a' 'b' < /path/to/file ## works because the file's contents are passed to tr

命令替换和重定向运算符都是由 POSIX 定义的(请参阅上面给出的命令替换链接),并且应该在几乎任何 shell 中可用。另一个相关工具是命令替换。有两种编写方法,您可以将命令括在反引号 ( `command`) 中,也可以编写$(command).一般来说,后者是首选,因为它是一种更强大的语法,可以更干净地处理多个嵌套命令。

因此,要使用文件的内容,您可以编写:

command $(cat /path/to/file)

或者

command `cat /path/to/file`

相关内容