在脚本或 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"
我正在使用以下命令删除文件中的一行,该行在脚本中部分有效,但在 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"