【发布时间】:2018-03-02 02:51:08
【问题描述】:
我想从 Makefile 将空格分隔的带引号的子字符串传递给 make 目标(实际上是几个不同的 make 目标)。目标只是执行一个 bash 脚本,然后将每个引用的子字符串作为位置参数传递给另一个脚本。
测试Makefile:
FOO="foo bar"
FOO+="bar baz"
FOO+="baz qux"
FOO+="qux"
export FOO
t:
./script.sh
这里是script.sh:
#! /bin/bash
set -ex
./thing.sh "$FOO"
这不起作用;输出(注意周围的单引号)是:
???? ~/c/scrap
(i) make t
./script.sh
+ ./thing.sh '"foo bar" "bar baz" "baz qux" "qux"'
需要明确的是,我希望将多个参数传递给thing.sh,而不是单个参数,并且我需要引用每个参数,因为它可能包含空格或特殊字符。
???? ~/c/scrap
(i) make t
./script.sh
+ ./thing.sh "foo bar" "bar baz" "baz qux" "qux"
完成此任务的最佳方法是什么?理想情况下,我们会在 Makefile 中解决这个问题,以避免在每个消耗 FOO 的目标中重复解决方案。
【问题讨论】:
-
我没有意识到你需要保留双引号。
-
双引号中的“单词”是否包含空格或其他特殊字符?你确定
script.sh(和thing.sh)需要引号,或者你只是想让它像你在控制台上键入它一样运行,每个单词都有引号。区别在于script.sh中$1的值应该是"foo"还是只是foo? -
是的,它们包含空格,因此需要引用;抱歉,我在最初的示例中没有澄清这一点。 (尽管在我提出的解决方案中对此进行了澄清。)我将编辑问题以更准确地反映要求。