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

1

マクロは無視されません。予想とは異なるタイミングで評価されるだけです。M4sugar マクロは、configure作成されるときに評価されます。configureis run時に 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 (または同様のもの) によって提案されたランタイム手法の 1 つに頼る必要があります。

m4_toupper("x${foobar}")は環境で定義されていない"X${FOOBAR}"ため、表示されません。${FOOBAR}

于 2013-09-14T00:02:50.757 に答える