Shell BASH/SH/。。AutoConf:包装字符串比较

Shell BASH/SH/。。AutoConf:包装字符串比较,shell,autoconf,m4,Shell,Autoconf,M4,我正在修改configure.ac以与AutoConf一起使用: 脚本指出它需要在darwin、solaris、cygwin和linux上运行 我想这就是为什么它使用一种比较字符串的神秘方法: foo="1" if test "x$foo" != "x0"; then 这种双重否定使通读代码变得困难。我能打扫一下吗 如何实现字符串比较宏: if STR_EQUAL( $foo, "1" ); then 或: 这是解决问题的最好办法吗 编辑:显然,此脚本是用M4编写的,使用expr应该具有足够

我正在修改configure.ac以与AutoConf一起使用:

脚本指出它需要在darwin、solaris、cygwin和linux上运行

我想这就是为什么它使用一种比较字符串的神秘方法:

foo="1"
if test "x$foo" != "x0"; then
这种双重否定使通读代码变得困难。我能打扫一下吗

如何实现字符串比较宏:

if STR_EQUAL( $foo, "1" ); then
或:

这是解决问题的最好办法吗

编辑:显然,此脚本是用M4编写的,使用expr应该具有足够的可移植性和可读性:

if expr $foo; then
  #do something
fi
如果要消除expr的输出,请说:If expr$foo>/dev/null;然后,使用expr应具有足够的可移植性和可读性:

if expr $foo; then
  #do something
fi

如果要消除expr的输出,请说:If expr$foo>/dev/null;然后

为了shell的可移植性,您真的应该尽可能多地在宏中包装。在autoconf中有一些特殊的注意事项,这就是代码看起来如此神秘的原因

也就是说,清理混乱的代码没有限制:

foo="1"
AS_IF([test "x$foo" = "x1"], [...])

说明为什么此测试语句中有前导x。在这种情况下,如果您愿意,您可以不使用它。

对于shell的可移植性,您确实应该尽可能多地使用宏进行包装。在autoconf中有一些特殊的注意事项,这就是代码看起来如此神秘的原因

也就是说,清理混乱的代码没有限制:

foo="1"
AS_IF([test "x$foo" = "x1"], [...])
说明为什么此测试语句中有前导x。在这种情况下,如果您愿意,您可以不使用它。

使用test需要一些奇怪的结构来处理古老的外壳。如果您不关心这些shell,那么可以使用AS_If和一个简单的测试,但是如果您不关心可移植性,那么您可能不应该使用autoconf。在国际海事组织(IMO)的案例中,它可能稍微清洁一些:

使用测试需要一些奇怪的结构来处理古老的外壳。如果您不关心这些shell,那么可以使用AS_If和一个简单的测试,但是如果您不关心可移植性,那么您可能不应该使用autoconf。在国际海事组织(IMO)的案例中,它可能稍微清洁一些:


如果它必须在您所说的那些环境中运行,我会保留比较结果。您正在查看由autoconf生成的配置脚本吗?通常不需要在configure.ac中进行这种类型的检查,如果要检查字符串,则应使用AS_if而不是原始测试。如果必须在您所说的那些环境中运行,我将保留比较结果。您是否正在查看由autoconf生成的配置脚本?通常不需要在configure.ac中进行这种检查,如果要检查字符串,应该使用AS_if而不是原始测试。