Windows cygwin上的sed行为不一致

Windows cygwin上的sed行为不一致,windows,sed,cygwin,Windows,Sed,Cygwin,我一直面临一个问题,某个sed表达式在一个windows系统上工作,在另一个windows系统上中断。shell脚本正在cygwin上运行,其中cygwin和sed版本是相同的 表达方式: url=$(echo ${!1} | sed 's/{/\\\{/g'); \ 系统上的错误为: Error: /usr/bin/sed: -e expression #1, char 2: unterminated `s' command 因此,当我通过转义大括号来使用它时,它会起作用: url=$(e

我一直面临一个问题,某个sed表达式在一个windows系统上工作,在另一个windows系统上中断。shell脚本正在cygwin上运行,其中cygwin和sed版本是相同的

表达方式:

url=$(echo ${!1} | sed 's/{/\\\{/g'); \
系统上的错误为:

Error: /usr/bin/sed: -e expression #1, char 2: unterminated `s' command
因此,当我通过转义大括号来使用它时,它会起作用:

url=$(echo ${!1} | sed 's/\{/\\\{/g'); \
但是,另一个错误是:

sed: -e expression #1, char 11: Invalid preceding regular expression

请帮忙。。坚持了一段时间。如果您需要更多详细信息,请告诉我。

替换为
\{

echo ${!1} | sed -e 's/{/\\{/g'
或者通过
\{

echo ${!1} | sed -e 's/{/\\\\{/g')
3
\
和没有明确的
-e
肯定是问题所在

信息:my cygwin上的代码没有错误(使用直接字符串代替
${!1}


如果您转义第一个
{
,sed正在等待大量的出现正则表达式和右大括号(例如:
\{1,\}

echo${!1}的输出是什么?第一个在LFS系统上运行,Cygwin 32位和Cygwin 64位。第二个在所有三个系统上都有错误。这对我来说很有意义。既然你说这是一个shell脚本,那么你运行的是同一版本的shell(看起来像某个“sh”后代)你正在使用?@Chris J.Breisch我正在使用sh作为shell。是的,第二个sed是问题所在。但真正的问题在于理解哪个cygwin或sed在不同的windows机器上给出不同的结果(唯一的区别是32位与64位)@NeronLeVelu感谢您的解决方案,但我真正的问题是在不同的windows+cygwin机器上获得不同的结果。如果sed/shell代码编写不正确,有没有关于解决此类可移植性问题的建议(太多或缺少
`您不能假设结果是相同的,这取决于环境。有些人会让
`成为一个``而其他人会通过对下一个信息或其他行为采取行动来删除它。