我一直在尝试为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)运行的程序坚持只评估变量的第一部分,直到空格。 想法赞赏。
答案 0 :(得分:1)
当您使用变量运行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"
(再次包括引号。)