Macros 给RPM宏一个带空格的参数

Macros 给RPM宏一个带空格的参数,macros,rpm,rpmbuild,rpm-spec,Macros,Rpm,Rpmbuild,Rpm Spec,RPM宏示例: %define hello() \ printf 'hello, %{1}.\\n'; 我希望能够为其提供带有空格的宏,如: %{hello "Dak Tyson"} -> printf 'hello, Dak Tyson.\n' 然而,它一直在这样做: %{hello "Dak Tyson"} -> printf 'hello, "Dak.\n' 换句话说,它不解释双引号,而是按原样使用它们 单引号也不起作用: %{hello 'Dak Tys

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'
Nor大括号:

%{hello {Dak Tyson}}

->

printf 'hello, {Dak.\n'
有什么方法可以给RPM宏参数加空格吗?

我仔细研究了与之相关的问题。我在那里发现了一个循环,它使用空格来解析参数,(我认为)没有办法绕过这个循环。我认为你不能用空格来辩论

不过,我确实发现宏参数是安全的

我的
.rpmmacros
文件:

%hello() '%{1}'
%name Dak Tyson
定义了上述宏后,此命令:

rpm --eval '%{hello %{name}}'
rpm --eval '%{hello %{hello name}}'
收益率:

'Dak Tyson'
error: Unterminated {: {hello
  2<     (empty)
  1<   (empty)
  0< '
'
因此,如果我在宏定义中确实需要空格,我可以首先将它们定义为宏

顺便说一句,我还发现嵌套的参数化宏不起作用

此命令:

rpm --eval '%{hello %{name}}'
rpm --eval '%{hello %{hello name}}'
收益率:

'Dak Tyson'
error: Unterminated {: {hello
  2<     (empty)
  1<   (empty)
  0< '
'
错误:未终止{:{hello
2<(空)
1<(空)
0< '
'
我仔细研究了与的关系。我在其中发现了一个循环,它使用空格来解析参数,(我认为)这个循环是无法绕过的。我认为你不能用空格来给出参数

不过,我确实发现宏参数是安全的

我的
.rpmmacros
文件:

%hello() '%{1}'
%name Dak Tyson
定义了上述宏后,此命令:

rpm --eval '%{hello %{name}}'
rpm --eval '%{hello %{hello name}}'
收益率:

'Dak Tyson'
error: Unterminated {: {hello
  2<     (empty)
  1<   (empty)
  0< '
'
因此,如果我在宏定义中确实需要空格,我可以首先将它们定义为宏

顺便说一句,我还发现嵌套的参数化宏不起作用

此命令:

rpm --eval '%{hello %{name}}'
rpm --eval '%{hello %{hello name}}'
收益率:

'Dak Tyson'
error: Unterminated {: {hello
  2<     (empty)
  1<   (empty)
  0< '
'
错误:未终止{:{hello
2<(空)
1<(空)
0< '
'

IJWTS感谢您阅读了RPM源代码,这样我就不必了。IJWTS感谢您阅读了RPM源代码,这样我就不必了。