[英]How to call command with double and single quotes in Bash
我一直在嘗試為IBM License Use Management編寫Shell腳本。 腳本將在Cygwin / Windows上運行。 一些參數(特別是包含空格的參數)需要同時使用雙引號和單引號。 以下內容可以在命令行中使用,也可以作為腳本中的完整命令使用:
i4blt -Al -v "'Dassault Systemes'" -p "PR1 VER123"
但是,當我嘗試使用供應商名稱參數作為變量時,即VENDOR =“ \\”'Dassault Systemes'\\“”或類似的東西,將無法正常工作。 因此,以下內容:
VENDOR="\"'Dassault Systemes'\""
PRODUCT="\"PR1 VER123\""
i4blt -Al -v $VENDOR -p $PRODUCT
返回此:
Vendor "'Dassault not found
我嘗試轉義引號,將其作為參數傳遞給函數,並嘗試從Stackoverflow中選擇更多解決方案。 我試圖從腳本(i4blt)運行的程序堅持只評估變量的第一部分,直到空格為止。 想法表示贊賞。
當您使用變量運行i4blt
時,它們將被擴展為它們的值,包括它們的空格,而Bash會將參數按空格分隔。
從而
VENDOR="\"'Dassault Systemes'\""
PRODUCT="\"PR1 VER123\""
i4blt -Al -v $VENDOR -p $PRODUCT
將使用以下參數運行i4blt
:
-Al
-v
"'Dassault
Systemes'"
-p
"PR1
VER123"
(包括引號,因為這是設置變量的方式。)
要使每個擴展變量成為單個參數,您需要引用它:
i4blt -Al -v "$VENDOR" -p "$PRODUCT"
參數將是:
-Al
-v
"'Dassault Systemes'"
-p
"PR1 VER123"
(再次包含引號。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.