linux - sed 不像其他 linux 命令那样显示退出状态

标签 linux bash shell sed exit-code

$ cat file 
aa
Baa
CaaD
$ sed -i -e 's/aa/AA/' file
$ echo $?
0
$ cat file
AA
BAA
CAAD
$ sed -i -e 's/aa/AA/' file
$ echo $?
0

无论是否修改,这两种情况下的 sed 命令退出状态都是相同的,并且返回与 0 相同的退出状态。如果它发生变化,我希望它为 0,如果没有修改,我希望它为 1任何东西。

如果 grep 命令在找到某个字符串时返回 0,如果没有找到则返回 1,同样,如果 sed 命令修改了文件,它必须返回 0,而 sed 命令没有修改任何内容,那么它必须返回 1

我尝试使用 sed 内部“q”命令,但没有用。请帮助我。

最佳答案

答案是“因为这就是 sed 的实现方式”

如果你想看看是否有任何变化

sed -i.bak -e 's/aa/AA/' file
if diff -q file file.bak >/dev/null; then
    echo no changes
else
    echo something changed
fi

关于linux - sed 不像其他 linux 命令那样显示退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445358/

相关文章:

linux - 在 Linux 上安装 pymc 时出现错误

c++ - Xlib:关闭窗口总是导致致命的 IO 错误?

linux - linux中文件的原子读取和截断

linux - 如何使用 bash 脚本中的变量在谷歌浏览器中运行 url

android - 在 android 中重命名脚本(无根)

linux - 更改文本文件中的一行(如果存在)

linux - 读取 `stdout` 和 `stderr` 的值

bash - 为什么我不应该在 shell 脚本上使用 "bet the future of the company"?

windows - Erlang shell 自动完成功能在 Windows 上不起作用

shell - 在 ("{}"中多次使用当前文件名 "find -exec")?