在bash登录shell中分配一个变量

在bash登录shell中分配一个变量,bash,unix,escaping,cygwin,Bash,Unix,Escaping,Cygwin,我正在尝试从Windows命令提示符执行此操作 C:\cygwin64\bin\bash --login -c "$var="<hallo>" && echo "$var"" 但这是可行的: C:\cygwin64\bin\bash --login -c "var="hello" && echo "$hello"" 登录shell似乎会在您编写时收到“时引发问题 C:\cygwin64\bin\bash --login -c "$v

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

 C:\cygwin64\bin\bash --login -c "$var="<hallo>" &&
 echo "$var""
但这是可行的:

C:\cygwin64\bin\bash --login  -c 
    "var="hello" && echo "$hello""
登录shell似乎会在您编写时收到“时引发问题

C:\cygwin64\bin\bash --login -c "$var="<hallo>" && echo "$var""
但这不是贝壳的作用

shell在运行时只匹配引号。所以贝壳看到了

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

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

您的引号已关闭,并且在第一次尝试时变量赋值中也有一个
$
。你想要
-c“var='''
或类似的。你能解释一下为什么我必须在一个普通的bash中做这些不同的事情吗?在一个赋值中不使用
$
与正常没有什么不同。那里的引文也没有。当您说
“var=”“&&echo“$hello”
时,shell不会以这种方式看到您希望位于外部字符串内部的引号。您会看到
var=”“&&echo“$hello”
(即,您在心里去掉了外部引号,留下了内部引号)。这个贝壳比那个还要笨。它从左到右对引号。所以
“var=“
是一个带引号的字符串,然后
是不带引号的字符串,然后
”&&echo“
是一个带引号的字符串,然后
$hello
是不带引号的字符串,然后
是一个带引号的空字符串。
$var="<hallo>" && echo "$var"
["$var="][<hallo>][" && echo "][$var][""].
C:\cygwin64\bin\bash --login -c 'var="<hallo>" && echo "$var"'
C:\cygwin64\bin\bash --login -c "var='<hallo>' && echo \"\$var\""