如何在Bash中使用双引号和单引号调用命令

时间:2014-08-05 08:46:42

标签: bash shell cygwin

我一直在尝试为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)运行的程序坚持只评估变量的第一部分,直到空格。 想法赞赏。

1 个答案:

答案 0 :(得分:1)

当您使用变量运行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"
  8. (包括引号,因为这是设置变量的方式。)

    要使每个扩展变量成为单个参数,您需要引用它:

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

    参数将是:

    1. -Al
    2. -v
    3. "'Dassault Systemes'"
    4. -p
    5. "PR1 VER123"
    6. (再次包括引号。)