Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本未连接字符串_Bash_Shell_Sed - Fatal编程技术网

Bash脚本未连接字符串

Bash脚本未连接字符串,bash,shell,sed,Bash,Shell,Sed,我试图从用户输入中连接两个字符串。这些是“寻找什么”和“替换什么”文本。它最终将成为构建过程的一部分。我似乎无法使变量正确连接。以下是脚本: #!/bin/bash first=${1} second=${2} TO_REPLACE="Hello Kitties=$first" REPLACEMENT="Hello Kitties=$second" echo $TO_REPLACE echo "s/${TO_REPLACE}/${REPLACEMENT}/g" sed -i "s/${TO_RE

我试图从用户输入中连接两个字符串。这些是“寻找什么”和“替换什么”文本。它最终将成为构建过程的一部分。我似乎无法使变量正确连接。以下是脚本:

#!/bin/bash
first=${1}
second=${2}
TO_REPLACE="Hello Kitties=$first"
REPLACEMENT="Hello Kitties=$second"
echo $TO_REPLACE
echo "s/${TO_REPLACE}/${REPLACEMENT}/g"
sed -i "s/${TO_REPLACE}/${REPLACEMENT}/g" "C:\\Test\\Mah.config"
我将echo与
first
second
变量放在一起进行故障排除。我得到的结果是:

mrhoden@mrhoden-dt ~
$ bash C:\\Users\\mrhoden\\workspace\\Test\\Concatenation.sh Yes No
Hello Kitties=Yes
/gello Kitties=Noes
我不明白为什么第一个很好用,但第二个不行。我甚至考虑过
/
,但当我用
l
或任何其他字符替换它时,我得到的结果基本相同。我尝试了各种方法对变量进行分组和转义。我甚至下载并使用了eclipse和外壳插件,以防windows和基于unix的编辑器(以前是Notepad++)之间出现一些奇怪的交互


我不知道该怎么办,希望您能提供帮助。

看起来您的脚本文件是DOS/Windows格式的(每行末尾带有回车符和换行符),而不是unix格式的(每行末尾只有换行符)。当shell执行它时,它将回车(有时写入
\r
)作为命令的一部分。例如:
first=${1}\r
$first
设置为第一个参数,并附加回车符。然后
TO_REPLACE=“Hello Kitties=$first”\r
$TO_REPLACE
设置为该值,并在末端附加另一个回车。所以当你看到第二个回声时,它实际上在做的是:

echo "s/Hello Kitties=Yes\r\r/Hello Kitties=No\r\r/g"\r
打印时,每个回车符都会使终端返回到行的开头,因此它基本上会打印三件东西,每件都在最后一件上面:

s/Hello Kitties=Yes
/Hello Kitties=No
/g
给你留下一堆乱七八糟的东西:

/gello Kitties=Noes

解决方案:正如@Shelleter所建议的,使用
dos2unix
将脚本转换为unix格式,然后继续使用unix样式的脚本文本编辑器。

看起来您的脚本文件是DOS/Windows格式(每行末尾都有回车符和换行符)而不是unix格式(每行末尾只有换行符)。当shell执行它时,它将回车符(有时写入
\r
)作为命令的一部分。例如:
first=${1}\r
$first
设置为第一个参数,并附加回车符。然后
设置为\u REPLACE=“Hello Kitties=$first”\r
$设置为_REPLACE
,并在末端加上另一个回车符。因此,当你到达第二个回波时,它实际做的是:

echo "s/Hello Kitties=Yes\r\r/Hello Kitties=No\r\r/g"\r
打印时,每个回车符都会使终端返回到行的开头,因此它基本上会打印三件东西,每件都在最后一件上面:

s/Hello Kitties=Yes
/Hello Kitties=No
/g
给你留下一堆乱七八糟的东西:

/gello Kitties=Noes

解决方案:正如@Shelleter所建议的,使用
dos2unix
将脚本转换为unix格式,然后继续使用unix样式的脚本文本编辑器。

看起来您的脚本文件是DOS/Windows格式(每行末尾都有回车符和换行符)而不是unix格式(每行末尾只有换行符)。当shell执行它时,它将回车符(有时写入
\r
)作为命令的一部分。例如:
first=${1}\r
$first
设置为第一个参数,并附加回车符。然后
设置为\u REPLACE=“Hello Kitties=$first”\r
$设置为_REPLACE
,并在末端加上另一个回车符。因此,当你到达第二个回波时,它实际做的是:

echo "s/Hello Kitties=Yes\r\r/Hello Kitties=No\r\r/g"\r
打印时,每个回车符都会使终端返回到行的开头,因此它基本上会打印三件东西,每件都在最后一件上面:

s/Hello Kitties=Yes
/Hello Kitties=No
/g
给你留下一堆乱七八糟的东西:

/gello Kitties=Noes

解决方案:正如@Shelleter所建议的,使用
dos2unix
将脚本转换为unix格式,然后继续使用unix样式的脚本文本编辑器。

看起来您的脚本文件是DOS/Windows格式(每行末尾都有回车符和换行符)而不是unix格式(每行末尾只有换行符)。当shell执行它时,它将回车符(有时写入
\r
)作为命令的一部分。例如:
first=${1}\r
$first
设置为第一个参数,并附加回车符。然后
设置为\u REPLACE=“Hello Kitties=$first”\r
$设置为_REPLACE
,并在末端加上另一个回车符。因此,当你到达第二个回波时,它实际做的是:

echo "s/Hello Kitties=Yes\r\r/Hello Kitties=No\r\r/g"\r
打印时,每个回车符都会使终端返回到行的开头,因此它基本上会打印三件东西,每件都在最后一件上面:

s/Hello Kitties=Yes
/Hello Kitties=No
/g
给你留下一堆乱七八糟的东西:

/gello Kitties=Noes

解决方案:正如@Shelleter所建议的,使用
dos2unix
将脚本转换为unix格式,然后坚持使用unix风格的文本编辑器来编辑脚本。

看起来像是
$'\r'
从MSWin行结束进入字符串。
dos2unix文件
。祝你好运。看起来像是
$'\r'
从MSWin行结束进入字符串。
dos2unix文件
。祝你好运。似乎从MSWin行的
$'\r'
结尾进入字符串。
dos2unix文件
。祝你好运。似乎从MSWin行的
$'\r'
结尾进入字符串。
dos2unix文件
。祝你好运。感谢你的完整解释,它终于有意义了。如果有人来找这个,你必须找到它重新安装cygwin并在utils下查找dos2unix包。在看到这个答案之前,我完全被搞糊涂了。非常好的解释!感谢您再为我节省5个小时!感谢您的完整解释,它终于有意义了。如果有人来找这个,您必须重新安装cygwin并在utils下查找dos2unix包包装。在看到这个答案之前,我完全糊涂了。很好的解释!谢谢你再帮我省下5个