我有一个脚本,调用像这样(简化)
#!/bin/bash
if [[ -f one.source ]]
then
make one CPPFLAGS='-DONE -DTWO -DTHREE'
fi
if [[ -f two.source ]]
then
make two CPPFLAGS='-DONE -DTWO -DTHREE'
fi
字符串
定义的列表越来越长,我希望避免保持两个命令行同步。我想定义一个变量并在两个命令中使用它。我试过了
DEFINES='-DONE -DTWO -DTHREE'
DD="CPPFLAGS='"
DD+=$DEFINES
DD+="'"
型
有了这个
echo $DD
CPPFLAGS='-DONE -DTWO -DTHREE'
型
似乎做我想做的事,但是
make one $DD
型
不符合
make one 'CPPFLAGS='\''-DONE' -DTWO '-DTHREE'\'''
make: invalid option -- 'D'
make: invalid option -- 'T'
make: invalid option -- 'D'
make: invalid option -- 'T'
make: invalid option -- 'H'
Usage: make [options] [target] ...
型
1条答案
按热度按时间vmjh9lq91#
不要引用你自己。使用
printf "%q"
或@Q
扩展。使用bash数组。
字符串
但是
$DD
没有引号,所以它经历了单词拆分扩展,这将它拆分为空格。使用shellcheck检查脚本。
马可是一位老爷爷。考虑使用较新的构建系统,如CMake。