相关疑难解决方法(0)

在 bash 脚本中哪个更惯用:`|| 真`或`|| :`?

我没有做太多的 shell 脚本,所以当我阅读文档git submodule时我有点惊讶,我看到了他们在这个文档中使用的语法:

任何子模块中命令的非零返回都会导致处理终止。这可以通过添加|| :到命令的末尾来覆盖。

我不得不查找这|| :是强制命令成功退出的简写。每当我必须成功退出命令时,我都会使用|| true. 被|| :认为更地道?

shell bash

53
推荐指数
3
解决办法
4万
查看次数

内置的冒号 ':' 有什么作用?

我已经破解了很多 shell 脚本,有时最简单的事情让我感到困惑。今天我遇到了一个广泛使用:(冒号)bash 内置的脚本。

文档似乎很简单:

: (a colon)  
     : [arguments]  
Run Code Online (Sandbox Code Playgroud)

除了扩展参数和执行重定向之外,什么都不做。返回状态为零。

但是,我以前只在 shell 扩展的演示中看到过这个。我遇到的脚本中的用例广泛使用了这种结构:

if [ -f ${file} ]; then
    grep some_string ${file} >> otherfile || :
    grep other_string ${file} >> otherfile || :
fi
Run Code Online (Sandbox Code Playgroud)

实际上有数百个 grep,但它们只是更多相同。除了上面的简单结构之外,不存在输入/输出重定向。稍后在脚本中不会检查返回值。

我正在阅读这是一个无用的结构,上面写着“或什么都不做”。用“或什么都不做”来结束这些 grep 的目的是什么?在什么情况下,这个构造会导致与简单地|| :从所有实例中删除不同的结果?

shell-script shell-builtin

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

bash 多行命令在连续字符后带有注释

考虑

echo \ # this is a comment
foo
Run Code Online (Sandbox Code Playgroud)

这给出:

$ sh foo.sh
 # this is a comment
foo.sh: line 2: foo: command not found
Run Code Online (Sandbox Code Playgroud)

在网上搜索后,我在姊妹网站 Stack Overflow 上找到了DigitalRoss解决方案。所以一个人可以做

echo `: this is a comment` \
foo
Run Code Online (Sandbox Code Playgroud)

或者

echo $(: this is a comment) \
foo
Run Code Online (Sandbox Code Playgroud)

但是,DigitalRoss 没有解释为什么这些解决方案有效。我很感激解释。他回复了一条评论:

曾经有一个 shellgoto命令分支到指定的标签,如:这里。该goto走了,但你仍然可以使用的 : whatever语法...:是一种解析的评论了。

但我想要更多细节和上下文,包括对可移植性的讨论。

当然,如果有人有其他解决方案,那也很好。

另请参阅较早的问题如何在 shell 脚本中注释多行命令?.


从下面的讨论中获取信息。这`: this is a comment`只是一个命令替换。的输出: …

shell bash

42
推荐指数
3
解决办法
3万
查看次数

如何在多个条件下使用“if”命令?

我该怎么做呢?

if [ -f town-*.swf ]
then
mkdir towns
fi
Run Code Online (Sandbox Code Playgroud)

这会检查是否town-*.swf存在,但我也需要它来寻找city-*.swf其他东西,所以我需要这样的东西:

if [ -f town-*.swf, city-*.swf ]
then
mkdir towns
fi
Run Code Online (Sandbox Code Playgroud)

bash

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

标签 统计

bash ×3

shell ×2

shell-builtin ×1

shell-script ×1