1

我想以大写形式打印出一个字符串变量。我正在尝试使用m4_toupper宏,但我的变量似乎被忽略了。

例如,给定以下代码:

foobar="linux-gnu"
echo "${foobar}"
echo m4_toupper("x${foobar}")
echo "${foobar}"

结果如下:

linux-gnu
X
linux-gnu

由于x大写,我怀疑 m4 宏工作正常,但可能没有收到我的变量字符串——然而,这些echo语句似乎工作正常。为什么返回一个空字符串?

4

2 回答 2

2

不了解 m4 宏,但这里有一些将变量转换为大写的方法:

$ echo $foobar | awk '{print toupper($0)}'
LINUX-GNU

$ echo $foobar | tr '[a-z]' '[A-Z]'
LINUX-GNU

$ echo ${foobar^^}
LINUX-GNU
于 2013-09-13T19:47:08.047 回答
1

您的宏不会被忽略,它只是在与您预期不同的时间进行评估。M4sugar 宏在创建configure时进行评估。您似乎希望在运行时应用 toupper 函数。您可以在创建时通过以下方式执行此操作:configure

m4_define([thestring], [linux-gnu])dnl
m4_define([thexstring], [x])dnl
m4_append([thexstring], m4_toupper(thestring))dnl
foobar="thestring"
echo "${foobar}"
echo "thexstring"
echo "${foobar}"

foobar但如果在运行时设置,这将无济于事。然后,您将不得不求助于 Fredrik Pihl(或类似的东西)建议的一种运行时技术。

在任何情况下,m4_toupper("x${foobar}")都更改为"X${FOOBAR}",这就是它没有出现的原因,因为${FOOBAR}没有在环境中定义。

于 2013-09-14T00:02:50.757 回答