2013-10-15 22 views
1

例RPM宏:給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宏參數有空格?

回答

3

我拖過RPM API C codemacro 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< ' 
' 
+1

感謝閱讀過此RPM的源代碼,所以我沒得IJWTS。 –