windows cmd 轉義字元和雙引號
阿新 • • 發佈:2021-09-04
不得不說,微軟的程式寫的真是一言難盡,這個cmd的雙引號機制也沒有一個官方的文件給你講清楚點。
首先我們知道的是,如果沒有引號,cmd是用空格來分割引數的。如果一個引數有空格,就需要用雙引號包圍起來。
比如:
parm hello world
就給parm
傳了兩個引數hello
和world
parm "hello world"
用引號包圍後,parm
就只有一個引數hello world
。
這種想必常用cmd的都知道,本文主要問題在,我要這樣寫呢:
parm hel"lo world"
parm hello" world""ok"
parm """hello"""
這樣就麻煩多了,你可以自己先寫個程式玩一玩看看。我寫了個程式測試:
展開程式碼
#ifdef __cplusplus #include <iostream> using namespace std; #else #include <stdio.h> #endif int main(int argc, char* argv[]) { #ifdef __GNUC__ printf("compile with gcc/g++ %d.%d.%d ", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__); #elif _MSC_VER printf("compile with msvc %d ", _MSC_VER); #endif #if defined(__DATE__) && defined(__TIME__) printf(" %s %s\n", __DATE__, __TIME__); #endif for (int i = 1; i < argc; i++) { printf("arg %d: %s\n", i, argv[i]); } return 0; }
關於具體的引號解析策略,等有空了再具體看這篇文章學習學習,然後更博
https://stackoverflow.com/questions/7760545/escape-double-quotes-in-parameter/15262019