Bash SED 未终止的"s"命令



我是Bash脚本的新手,遇到了一个问题。我已经搜索过了,看起来问题可能是我的变量$MODIFIED的内容。

想知道是否有人能帮我找到解决这个问题的方法?

我试图从一个目录中提取最后5个修改过的文件,然后通过替换第二个脚本中的第一行将它们导入第二个剧本。

到目前为止我的代码:

#Pipe last 5 modified files within Students and output to script2
#Checks if script2 exists to avoid overwriting.
cd ~/Students/Stu5
MODIFIED=$(ls -1t | head -5)

if [ -f ~/Documents/OSShellScripts/OSScript2.sh ]; then
cd ~/Documents/OSShellScripts
echo "OSScript2 already exists."
sed -i "1s/.*/$MODIFIED/" ~/Documents/OSShellScripts/OSScript2.sh
fi

这将返回错误:sed:-e表达式#1,char 17:未终止的"s"命令

如果我将MODIFIED变量改为说"你好",它就可以完美地工作。

任何能帮我指出哪里出了问题的人都会很好,谢谢。

传递给sed时,首先正确引用bash变量。

其次,请记住,您正在将数组传递到sed中。

如果这是故意的,你需要做这样的事情:

sed -i '1s/.*/'"$(echo ${MODIFIED})"'/' ~/Documents/OSShellScripts/OSScript2.sh

我还将sed的替代命令s更改为行命令c,因为您的变量可能包含斜杠:

sed -i '1c'"$(echo ${MODIFIED[@]})"

最新更新