分享您的 Unix/Linux 命令行功能和技巧。如果可能的话,尽量保持它的外壳/发行版不可知。有兴趣查看别名、单行、键盘快捷键、小 shell 脚本等。
Bash 使用感叹号进行历史扩展,如该问题的答案中所述(例如,使用sudo !!运行先前的命令行sudo)。但是,我找不到任何解释运行以下命令(即单个感叹号)的作用的地方:
!
Run Code Online (Sandbox Code Playgroud)
它似乎不打印任何内容并以 1 退出,但我不确定为什么会这样。我已经在网上和 Bash 手册页中查看过,但除了它是一个“保留字”这一事实之外,找不到任何东西——但也是如此},并运行这个:
}
Run Code Online (Sandbox Code Playgroud)
打印错误:
bash: syntax error near unexpected token `}'
Run Code Online (Sandbox Code Playgroud) 我意识到这!在命令行历史上下文中对命令行具有特殊意义,但除此之外,在运行脚本中,感叹号有时会导致解析错误。
我认为它与 an 有关event,但我不知道事件是什么或它做什么。即便如此,相同的命令在不同情况下的行为也会有所不同。
下面的最后一个示例导致错误;但是为什么,当相同的代码在命令替换之外工作时呢?.. 使用 GNU bash 4.1.5
# This works, with or without a space between ! and p
{ echo -e "foo\nbar" | sed -nre '/foo/! p'
echo -e "foo\nbar" | sed -nre '/foo/!p'; }
# bar
# bar
# This works, works when there is a space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/! p')"; echo "$var"
# bar
# This causes an ERROR, with NO …Run Code Online (Sandbox Code Playgroud) 我有一个名为foo.sh的简单 bash 脚本,如下所示:
#!/bin/bash
echo "Foo!"
Run Code Online (Sandbox Code Playgroud)
当我在./foo.sh收到Foo!消息时运行它时,一切都很好。但是,如果我echo "Foo!"直接从控制台,然后我得到预期的行为和信息:bash: !": event not found。
我知道 the!是作为前一个命令显示的,如果在 pe 单引号内使用,则将其视为文字。我只是想知道用它运行脚本有什么区别echo "Foo!"(即使是source ./foo.sh工作,但直接从控制台它没有。
!作为某个字符串的前缀将执行命令缓冲区中以给定(部分)字符串开头的任何命令。它还有一些其他用途。请参阅理解 bash 中的感叹号 (!)
我的问题是,如何在执行命令之前预览将要执行的命令?例如,如果我这样做!for,并且我之前已经编写了几个以“for”开头的命令,但我不完全确定我认为是最后一个的命令是否确实是我认为的命令。如果 bash 可以在实际执行命令之前向我显示将要执行的命令是什么,那将非常有用。有什么办法可以在 bash 中做到这一点吗?