使用带引号的脚本输出作为命令行参数

问题描述 投票:0回答:1

我想编写一个为另一个程序生成命令行参数的脚本。 直到知道我已经编写了一个脚本,它只是回显参数并按以下方式使用它:

external_program $(generate arguments)

一旦生成的参数需要引号,它就会停止工作。为了清楚我的意思:结果函数调用应该相当于

external_program "First argument with spaces" "Second argument with spaces"

如何编写和调用脚本来实现这种行为?

bash
1个回答
0
投票

您可以使用

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 除外)。

© www.soinside.com 2019 - 2024. All rights reserved.