簡體   English   中英

如何在Bash中使用雙引號和單引號調用命令

[英]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

  1. -Al
  2. -v
  3. "'Dassault
  4. Systemes'"
  5. -p
  6. "PR1
  7. VER123"

(包括引號,因為這是設置變量的方式。)

要使每個擴展變量成為單個參數,您需要引用它:

i4blt -Al -v "$VENDOR" -p "$PRODUCT"

參數將是:

  1. -Al
  2. -v
  3. "'Dassault Systemes'"
  4. -p
  5. "PR1 VER123"

(再次包含引號。)

暫無
暫無

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

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