在bash登录shell中分配变量

时间:2015-01-29 14:34:43

标签: bash unix escaping cygwin

我正在尝试从Windows命令提示符执行此操作。

 C:\cygwin64\bin\bash --login -c "$var="<hallo>" &&
 echo "$var""

我收到错误:

 The system cannot find the file specified.

但这有效:

C:\cygwin64\bin\bash --login  -c 
    "var="hello" && echo "$hello""

登录shell 似乎在获得'&lt;'时会导致问题。我怎样才能将带有尖括号的字符串分配给shell变量?

1 个答案:

答案 0 :(得分:1)

写作时

C:\cygwin64\bin\bash --login -c "$var="<hallo>" && echo "$var""

你期望shell将外部引号从该参数中剥离到-c并最终得到一个类似于

的字符串
$var="<hallo>" && echo "$var"

但这不是shell的作用。

shell只是匹配引号。所以shell看到了。

["$var="][<hallo>][" && echo "][$var][""].

您需要从当前shell中转义内部引号或使用不同的引号来避免此解析问题。

C:\cygwin64\bin\bash --login -c 'var="<hallo>" && echo "$var"'

另请注意,我从作业中的变量名称的开头删除了$,并且我在外部使用了单引号,以便当前的shell不会展开$var

在外面使用双引号,你需要使用类似的东西。

C:\cygwin64\bin\bash --login -c "var='<hallo>' && echo \"\$var\""

对于shell解析的类似讨论以及如何使用反引号嵌套(或不要),您可以看到我的回答here

相关问题