我在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
- 1. Linux命令行與Linux命令管道
- 2. 命令行* linux
- 3. Ruby在Linux上執行Bash命令
- 4. Java命令在Linux上
- 5. 在Linux中執行命令
- 6. grep命令行,linux
- 7. 運行Linux命令
- 8. Linux命令行Nodejs
- 9. Linux命令行rm/*
- 10. 從Symfony命令運行Linux命令
- 11. 用Linux製作命令行命令
- 12. Linux上的Oracle命令行工具
- 13. linux上運行命令不中斷
- 14. 在Java中執行Linux nodejs命令行
- 15. 在Linux命令行中運行PHP
- 16. 如何可以從命令行在Linux中執行nagios命令
- 17. 在Linux的單個命令行中執行三條命令
- 18. 在linux上通過java在終端上執行命令
- 19. 寫入從Linux命令行
- 20. 生成從Linux命令行
- 21. 從python運行linux命令
- 22. 用PHP執行linux命令
- 23. 從Daemon運行Linux命令
- 24. Linux命令行/ shell術語
- 25. Linux命令行從文本
- 26. 運行Linux命令 - runtime.exe
- 27. java執行linux命令
- 28. linux遠程執行命令
- 29. Linux命令行問題
- 30. 使用xargs多次在一個命令在linux命令行
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