*在Linux命令行上
我在C中做了一个小计算器,并且我想将简单的算术公式传递给我的程序。但它真的不喜欢我将字符'*'传递给我的程序。 为什么不呢? 我该如何解决这个问题,而不需要将asterix改成别的东西? 谢谢*在Linux命令行上
字符*
是扩展匹配文件名的外壳触发器。
有几种方法来对付它:
- 逃避它打字
mycalc 5 \* 3
- 地点时报价整体表现,并确保计算器的解析器这样工作:
myprog "5 * 3"
- 不要使用命令行:改为使用您自己的输入。
Linux命令shell(bash,tcsh,ksh,whatever)会在您的程序看到它之前将'*'展开成文件列表。关于这一点你可以做的很少 - 你可以让用户把星号放在单引号中,或者用反斜杠转义,或者用'x'代替。没有特别用户友好的。
*
得到扩展以匹配当前目录中的所有文件(这称为“globbing”)。您需要引用或转义*,或使用不同的符号。
*
评估为“bash下的当前目录中的所有内容”。然而,.
正常工作,并经常用作数学乘法的符号 - 特别是标量乘法。
*将调用通配,并扩大到您所在的目录下的所有文件,只是引用*和运行您的程序像
./yourprogram '10 * 10'
或
./yourprogram 10 '*' 10
随着第一种情况,你的程序只会传递1个参数,argv [1]将是字符串“10 * 10”,第二种情况下你会通过3个参数
的“计算”的应用程序,你可以从DEB检索存储库的apt-get安装的计算可以评估3 * 3而不是3 * 3
尝试逃离它,星号在C
特殊字符更改为* *
未提及最后一项技术。可以引用/转义每一种用法,可以关闭通配符。这样一来,如果你想用计算器了很多,你没有逃跑每次使用:
# For bash
set -o noglob
# For csh/tcsh
set noglob
# Now that noglob is set, you can safely use *
calc 3 * 3
+1 - 最好在包装脚本中运行'calc',以便用户可以享受更自然的语言输入。从文件管道输入时也非常有用。 – 2010-02-10 06:49:23
OR:总是在空目录:) – 2010-02-09 19:44:08
有趣的想法运行它。它可以作为专用*计算目录*销售。或者可能是*安全的计算环境*。 :-) – wallyk 2010-02-09 20:05:23
取决于外壳。虽然默认情况下,Bash在没有任何匹配的情况下保留一个未展开的glob,但它可以配置为删除glob('shopt -s nullglob')或使整个命令失败('shopt -s failglob')。在其他shell中,例如'tcsh',最后一个行为是默认行为。 – ephemient 2010-02-09 20:13:14