*在linux命令行上

时间:2010-02-09 19:30:51

标签: c linux

我在C中制作一个小计算器,我想将简单的算术公式传递给我的程序。但它真的不喜欢我将字符'*'传递给我的程序。 为什么不? 如何在不改变星号的情况下解决这个问题呢? 感谢

8 个答案:

答案 0 :(得分:9)

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

有几种方法可以解决它:

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

答案 1 :(得分:7)

扩展

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

答案 2 :(得分:6)

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

./yourprogram '10 * 10'

./yourprogram 10 '*' 10

对于第一种情况,你的程序只会传递1个参数,argv [1]将是字符串“10 * 10”,第二种情况你将通过3个参数

答案 3 :(得分:3)

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

答案 4 :(得分:2)

最后一项未提及的技术。引用/转义每个用法的insteead,你可以关闭globbing。这样,如果你想大量使用计算器,你就不必逃避每一次使用:

# For bash
set -o noglob

# For csh/tcsh
set noglob

# Now that noglob is set, you can safely use *
calc 3 * 3

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

答案 7 :(得分:-1)

尝试转义它,星号是C

中的特殊字符

将*更改为\ *