我想以大写字母打印出一个字符串变量。我试图使用m4_toupper
宏,但我的变量似乎被忽略了。
例如,给出以下代码:
foobar="linux-gnu"
echo "${foobar}"
echo m4_toupper("x${foobar}")
echo "${foobar}"
结果如下:
linux-gnu
X
linux-gnu
由于x
大写,我怀疑m4宏工作正常,但可能没有收到我的变量字符串 - 但是,echo
语句似乎工作正常。为什么返回一个空字符串?
答案 0 :(得分:1)
不知道m4宏,但是这里有一些方法可以将变量转换为大写:
$ echo $foobar | awk '{print toupper($0)}'
LINUX-GNU
$ echo $foobar | tr '[a-z]' '[A-Z]'
LINUX-GNU
$ echo ${foobar^^}
LINUX-GNU
答案 1 :(得分:1)
您的宏不会被忽略,只会在您预期的不同时间进行评估。
在configure
创建时评估M4sugar宏。您似乎希望在configure
运行时应用toupper功能。您可以在创建时通过以下方式执行此操作:
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}
未在环境中定义。