在 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 解析以及事物如何嵌套(或不嵌套)反引号的类似讨论,您可以查看我的回答 。
我正在尝试从 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 解析以及事物如何嵌套(或不嵌套)反引号的类似讨论,您可以查看我的回答