RPM宏示例:
%define hello() \
printf 'hello, %{1}.\\n';
我希望能够为它提供带有空格的宏,如下所示:
%{hello "Dak Tyson"}
->
printf 'hello, Dak Tyson.\n'
但是,它会继续这样做:
%{hello "Dak Tyson"}
->
printf 'hello, "Dak.\n'
换句话说,它不会解释双引号,而是按原样使用它们。
单引号也不起作用:
%{hello 'Dak Tyson'}
->
printf 'hello, 'Dak\.\n'
也不反斜杠:
%{hello Dak\ Tyson}
->
printf 'hello, Dak\.\n'
也没有大括号:
%{hello {Dak Tyson}}
->
printf 'hello, {Dak.\n'
有什么办法可以给RPM宏参数加上空格吗?
我浏览了与宏扩展有关的RPM API C代码。我在其中找到一个循环,该循环使用空格解析参数,并且(我认为)没有办法解决该循环。我认为您不能在参数中加空格。
我确实发现宏参数是安全的。
我的.rpmmacros
档案:
%hello() '%{1}'
%name Dak Tyson
在定义了以上宏之后,此命令:
rpm --eval '%{hello %{name}}'
产量:
'Dak Tyson'
这样,如果我确实在宏定义中需要空格,则可以先将它们定义为宏。
我还偶然发现嵌套的参数化宏不起作用。
该命令:
rpm --eval '%{hello %{hello name}}'
产量:
error: Unterminated {: {hello
2< (empty)
1< (empty)
0< '
'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句