我想编写一个为另一个程序生成命令行参数的脚本。 直到知道我已经编写了一个脚本,它只是回显参数并按以下方式使用它:
external_program $(generate arguments)
一旦生成的参数需要引号,它就会停止工作。为了清楚我的意思:结果函数调用应该相当于
external_program "First argument with spaces" "Second argument with spaces"
如何编写和调用脚本来实现这种行为?
您可以使用
xargs
来实现这一点。
写入
generate
,以便输出由空字符分隔的每个参数:
#!/bin/sh
# File: generate
printf 'argument1\0'
printf 'argument 2\0'
printf 'argument"3\0'
然后你就可以做
./generate | xargs -0 external_program
。
示例:
#!/bin/sh
# File: print_args
for arg in "$@"; do
echo "Argument: '$arg'"
done
$ ./generate | xargs -0 ./print_args
Argument: 'argument1'
Argument: 'argument 2'
Argument: 'argument"3'
如果参数包含任何字符(无论是否包含空格),这都会起作用(当然,NUL 除外)。