在脚本或 shell 中执行的结果不同

Not same result executing in script or in shell

我正在使用以下命令删除文件中的一行,该行在脚本中部分有效,但在 shell.

中完全有效

cat "$folderDb.list" | sed "/^$elementToDeleteKey /d" > "$folderDb.list-d"

$elementToDeleteKey 后的 space 是强制性的,因为文件结构为:

KEY_WITHOUT_SPACES INFO1 INFO2 INFO3...

在我的脚本中执行的这段代码在键是文件时删除了该行(其中 spaces 被下划线替换),但在它是文件夹时则不会(此处相同的替换)。我知道这无关紧要,因为在这种情况下,它们都被视为字符串。

在 shell 中手动执行的这段代码输出了我想要的结果:该行被删除。

输入文件

/share/homes/test/test1/backup.conf 4 979 Jan 20 15:02:05 2022 /share/homes/test/test1/backup.conf
/share/homes/test/test1/backups.sh 4 843 Feb 19 23:25:02 2019 /share/homes/test/test1/backups.sh
/share/homes/test/test1/test2 8 4096 Jan 26 11:46:21 2022 /share/homes/test/test1/test2
/share/homes/test/test2 8 4096 Jan 26 11:46:21 2022 /share/homes/test/test2
/share/homes/test/test1 8 4096 Jan 27 12:21:20 2022 /share/homes/test/test1
/share/homes/test/test1/test2/backup.conf 4 324 Mar 17 23:06:42 2016 /share/homes/test/test1/test2/backup.conf

elementToDeleteKey

/share/homes/test/test2 /share/homes/test/test1/test2/backup.conf

第一个是文件夹,第二个是文件,但正如我所说,从这个角度来看,它们都是字符串。

elementToDeleteKey 在传递给 sed 之前被反斜杠。所以它给出:

\/share\/homes\/test\/test2 \/share\/homes\/test\/test1\/test2\/backup\.conf

我很困惑!有人有解释吗?

最后没找到问题所在,但我通过直接修改文件而不是创建新文件来修复它。

sed -i "/^$elementToDeleteKey /d" "$folderDb.list"