簡體   English   中英

單引號和雙引號:如何在 unix 和 windows 中具有相同的行為?

[英]Single quotes and double quotes: How to have the same behaviour in unix and windows?

我有一個批處理腳本,它調用帶有一些參數的 exe。

目前我正在將參數傳遞給我的 exe:

$>my_cmd.exe %*

my_cmd.exe 程序的選項之一采用可以包含空格的參數

$>my_cmd.bat --req "in: lava"  (OK my prog receives in: lava)

$>my_cmd.bat --req 'in: lava'  (NOK my program receives 'in: lava')

用戶無差別地使用單引號或雙引號。

它適用於雙引號,因為它們在批處理腳本級別被吃掉,但是當它們使用 ' (單引號)時,它會被留下並傳遞給我的程序。

my_cmd 是多平台的,在 unix 上,單引號和雙引號都是特殊字符。

我想避免在 my_cmd 程序中根據平台做一些特定的事情。

有沒有辦法在 shell 腳本和批處理腳本中具有相同的行為。 例如,如果存在單引號,批處理腳本可能會吃掉單引號?

告訴我什么是最適合您的解決方案。

非常感謝

在 Windows 上,參數處理(以及引用、通配等規則)是應用程序的責任。 如果您的代碼使用除包含完整帶引號的所有參數的單個字符串之外的任何內容,請理解這是因為您的開發工具已對GetCommandLine的結果進行了一些預處理。 因此,對於不同的報價處理,您需要查看您的開發工具,而不是操作系統。 最好的選擇通常是自己調用GetCommandLine並使用您選擇的庫來處理它,而不是您的編譯器提供的庫。

也就是說,Windows shell 團隊提供了這些庫之一。 請參閱CommandLineToArgvW 但這不是核心操作系統的一部分,使用它是完全可選的。

此外,批處理程序在進行變量替換時確實會考慮引號。 這種行為很難改變或禁用,但這聽起來不像是你問題的根源。

為什么不只是將引號更改為雙倍?

set args=%*
my_cmd.exe %args:'="%

暫無
暫無

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

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