我正在尝试从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变量?
答案 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。