m4_toupper 返回变量的空字符串



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

例如,给定以下代码:

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

结果为以下输出:

linux-gnu
X
linux-gnu

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

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

$ echo $foobar | awk '{print toupper($0)}'
LINUX-GNU
$ echo $foobar | tr '[a-z]' '[A-Z]'
LINUX-GNU
$ echo ${foobar^^}
LINUX-GNU

您的宏不会被忽略,它只是在与您预期的不同的时间进行评估。创建 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}未在环境中定义。

相关内容

  • 没有找到相关文章

最新更新