我想打印出一个大写的字符串变量。我正在尝试使用 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}
未在环境中定义。