*在Linux命令行上

我正在C做一个小计算器,我想传递简单的算术公式到我的程序中。 但它真的不喜欢我传递字符'*'到我的程序。 为什么不? 而我怎么能解决这个问题,而不改变asterix到别的东西? 谢谢

字符*是扩展匹配文件名的外壳触发器。

有几种方法来处理它:

  • 输入mycalc 5 \* 3时将其退出
  • 将整个表达式放在引号中,并确保计算器的解析器以这种方式工作: myprog "5 * 3"
  • 不要使用命令行:改为使用自己的输入。

*被扩展以匹配当前目录中的所有文件(这被称为“globbing”)。 您需要引用或转义*,或使用不同的符号。

*将调用globbing并扩展到您所在目录中的所有文件。只需引用*并运行您的程序

./yourprogram '10 * 10'

要么

./yourprogram 10 '*' 10

在第一种情况下,程序只传递1个参数,argv [1]将是字符串“10 * 10”,第二种情况下会传递3个参数

Linux命令shell(bash,tcsh,ksh等等)会在你的程序看到它之前将'*'扩展成文件列表。 关于这一点你可以做的很少 – 你可以让用户把星号放在单引号中,或者用反斜杠转义,或者用'x'代替。 没有特别的用户友好。

最后一个技术没有提到。 被引用/逃避每一个用法,你可以关闭globbing。 这样,如果你想使用计算器很多,你不必逃避每一个用法:

 # For bash set -o noglob # For csh/tcsh set noglob # Now that noglob is set, you can safely use * calc 3 * 3 

*在bash下评估为“当前目录中的所有内容”。 不过, . 工作正常,经常用作数学乘法的符号 – 特别是标量乘法。

您可以从deb存储库apt-get install calc检索的“calc”应用程序可以评估3 * 3而不是3 * 3

尝试转义它,星号是C中的一个特殊字符

改成 \*