gpt4 book ai didi

bash - Makefile 将变量传递给 bash 脚本

转载 作者:行者123 更新时间:2023-12-05 07:36:42 33 4
gpt4 key购买 nike

我想将带引号的子字符串的空格分隔字符串从 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 的目标中重复解决方案。

最佳答案

这是一种在 Makefile 级别解决问题的方法:

FOO="foo bar"
FOO+="bar baz"
FOO+="baz qux"
FOO+="qux"
export FOO

t:
eval './script.sh $(FOO)'

这是 script.sh

#! /bin/bash
set -ex

./thing.sh "$@"

这是 thing.sh

#! /bin/bash
echo "$1"
echo "$2"
echo "$3"
echo "$4"

输出:

👌 ~/c/scrap
(i) make t
eval './script.sh "foo bar" "bar baz" "baz qux" "qux"'
+ ./thing.sh 'foo bar' 'bar baz' 'baz qux' qux
foo bar
bar baz
baz qux
qux

关于bash - Makefile 将变量传递给 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49062069/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com