【发布时间】:2017-03-10 21:27:49
【问题描述】:
如下所示,命令替换改变了引用的命令行参数的解释。幕后发生了什么,是否有解决方法?
$ cat dumpargs.sh
#! /usr/bin/env bash
for i in "$@"
{
echo "$i"
}
$ cat testfile.txt
'1 space' '2 space'
$ ./dumpargs.sh $(cat testfile.txt) ## produced undesired output
'1
space'
'2
space'
$ ./dumpargs.sh '1 space' '2 space' ## produces desired output
1 space
2 space
【问题讨论】:
-
shellcheck.net 会为您发现您的问题(缺少引用导致字符串拆分)。尽管期望 literal 引号(不会影响字符串拆分)将被视为 syntactic 引号(会)可能是一个更大的问题。
-
这也和BashFAQ #50密切相关。
-
简答,使用
xargs:cat testfile.txt |xargs ./dumpargs.sh -
我建议跳过
cat——直接从文件中读取比从从文件读取的单独程序写入的FIFO更有效。因此,<testfile.txt xargs ./dumpargs.sh或xargs ./dumpargs.sh <testfile。
标签: bash command-line-arguments command-substitution