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

Assign a Variable in bash login shell

我正在尝试从 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""

login shell 似乎在获得“<”时会导致问题。我怎样才能将带尖括号的字符串分配给 shell 变量?

写的时候

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

您期望 shell 将 outer 引号从 -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 解析以及事物如何嵌套(或不嵌套)反引号的类似讨论,您可以查看我的回答