相关疑难解决方法(0)

我可以在终端中忽略前导感叹号吗?(由于 ipython,我本能地输入它们)

因为我大部分时间都在 IPython shell 中度过,所以我有一个坏习惯,即在终端命令前加上感叹号。通常,这只会导致错误,但有时,它会导致一些不好的事情发生。我可以有效地禁用!终端中的功能吗?这是否有干扰任何脚本的风险?

command-line bash

24
推荐指数
3
解决办法
3061
查看次数

是否存在执行 bash 历史记录中的一系列命令的快捷方式?

假设我的 中有以下简单示例history

...
76 cd ~
77 ./generator.sh out.file
78 cp out.file ~/out/
79 ./out/cleaner.sh .
80 ls -alnh /out
...
Run Code Online (Sandbox Code Playgroud)

如果我想在一个命令中执行命令777879,是否存在快捷方式?我试过!77 !78 !79,它只会将它们全部放在一行上执行。

command-line bash command-history

20
推荐指数
2
解决办法
1168
查看次数

bash 脚本中的感叹号与终端中的感叹号

我有一个名为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 shell-script

7
推荐指数
1
解决办法
232
查看次数

尝试匹配和排除 grep 中的括号时未找到 bash 事件

在很长的一行中,我将总结为:

(foo),(bar,baz(word,right),(end)
Run Code Online (Sandbox Code Playgroud)

我只想打印:

      (bar,baz(word,right
Run Code Online (Sandbox Code Playgroud)

为了匹配第二个括号,我排除了第三个后面的单词:

$ grep -oP "\\(.*(?!word).*right"
Run Code Online (Sandbox Code Playgroud)

但是 Bash 解释了感叹号:

-bash: !word: 事件未找到

单引号保护感叹号失败grep: missing )

$ grep -oP '\\(.*(?!word).*right'
$ grep -oP '\\((?!word)(.*right)'
Run Code Online (Sandbox Code Playgroud)

反斜杠保护感叹号失败grep: unrecognized character after (? or (?-

任何的想法?

注意:-P用于 Perl 正则表达式,-o仅打印一行的匹配部分

shell grep bash quoting regular-expression

6
推荐指数
2
解决办法
1万
查看次数

Bash 误解了 sed 语句来重命名文件

我想重命名一系列以这种方式命名的文件

name (10).ext
name (11).ext
...
Run Code Online (Sandbox Code Playgroud)

name_10.ext
name_11.ext
...
Run Code Online (Sandbox Code Playgroud)

这个单行作品:

$ for i in name\ \(* ; do echo "$i" | sed -e 's! (\([0-9]\{2\}\))!_\1!' ; done
name_10.ext
name_11.ext
...
Run Code Online (Sandbox Code Playgroud)

但这个没有:

$ for i in name\ \(* ; do mv "$i" "$(echo "$i" | sed -e 's! (\([0-9]\{2\}\))!_\1!')" ; done
bash: !_\1!': event not found
Run Code Online (Sandbox Code Playgroud)

为什么?如何避免这种情况?


使用

$ bash --version
GNU bash, versione 4.3.48(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 18.04 上。


虽然在这个类似的问题中显示了一个简单的情况!,但这里!只考虑了!内部单引号,并将其与内部单引号、内部双引号进行比较。正如评论中所指出的,Bash 在这两种情况下的行为方式不同。这是关于 …

shell bash ubuntu sed files

3
推荐指数
1
解决办法
500
查看次数