簡體   English   中英

*在linux命令行上

[英]* on the linux command line

我在C中制作一個小計算器,我想將簡單的算術公式傳遞給我的程序。 但它真的不喜歡我將字符'*'傳遞給我的程序。 為什么不? 如何在不改變星號的情況下解決這個問題呢? 謝謝

字符*是shell擴展匹配文件名的觸發器。

有幾種方法可以解決它:

  • 鍵入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'代替。 沒有特別用戶友好。

最后一項未提及的技術。 引用/轉義每個用法的insteead,你可以關閉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中的特殊字符

改成 \\*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM