示例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宏参数?
答案 0 :(得分:3)
我浏览了与RPM API C code有关的macro expansion。我在那里发现了一个循环,它使用空格来解析参数,并且(我认为)没有办法绕过这个循环。我认为你不能给出带空格的参数。
我确实发现宏参数是安全的。
我的.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< '
'