相关疑难解决方法(0)

目的是什么:(冒号)GNU Bash内置?

命令的目的是什么,什么都不做,只是一个评论领导者,但实际上是一个内置的shell?

它比在每个调用中将注释插入脚本大约40%要慢,这可能会根据注释的大小而有很大差异.我能看到的唯一可能的原因是:

# poor man's delay function
for ((x=0;x<100000;++x)) ; do : ; done

# inserting comments into string of commands
command ; command ; : we need a comment in here for some reason ; command

# an alias for `true' (lazy programming)
while : ; do command ; done
Run Code Online (Sandbox Code Playgroud)

我想我真正想要的是它可能具有的历史应用.

bash shell built-in

313
推荐指数
11
解决办法
11万
查看次数

":$ {foo = value}"中冒号运算符的说明

我理解bash中的冒号操作符就像null一样,我知道它在参数扩展中使用,以及以其他方式使用,但有人可以解释一下:

: ${SOMETHING='value'}
Run Code Online (Sandbox Code Playgroud)

从实验中我知道这会将环境变量设置$SOMETHING'value'但为什么?

"只是因为它确实"是一个有效的答案,但请指出我的文档(我似乎无法找到)或这个用法的正确名称将是有用的.我希望有一个更有启发性的解释.

bash

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

POSIX规范说这是避免歧义所必需的,这意味着什么?

在回复此评论时

现在,我得到了两个“:”是独立的,这就是为什么我找不到关于它们的任何文档的原因。在这种情况下是否需要第一个?

我是第一次在规范中注意到这一段:

在前面显示的参数扩展中,使用格式中的<colon>将导致测试未设置或为null的参数。省略<colon>将导致测试仅未设置的参数。如果参数为“#”并且省略了冒号,则应用程序应确保指定了单词(这是避免字符串长度扩展引起歧义的必要条件)。

我已经在bash参考手册中看到了匹配的解释:

当不执行子字符串扩展时,使用下面描述的形式(例如,“:-”),Bash测试未设置或为null的参数。省略冒号只会对未设置的参数进行测试。换句话说,如果包含冒号,则运算符会测试参数是否存在以及其值是否不为null;如果省略了冒号,则运算符仅测试是否存在。

之前,我了解这些扩展的冒号版本有何区别。

刚才让我感到困惑的是规范中的这句话:

如果参数为“#”并且省略了冒号,则应用程序应确保指定了单词(这是避免字符串长度扩展引起歧义的必要条件)。

我不明白,如果word未指定,这里可能有什么歧义。

没有任何扩展信号在shell变量名称中有效,因此它们可能无法以单字符变量名称开头。如果他们可以然后使用parameterof,#那么在没有冒号的情况下总是模棱两可的,因为您永远无法确定${#+foo}变量的长度foo或对#等的扩展。

我在这里想念什么?需要确保word存在哪些歧义?(我的意思是,没有word参加这种扩张显然没有用,但这不是同一回事。)

bash shell sh variable-expansion

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

标签 统计

bash ×3

shell ×2

built-in ×1

sh ×1

variable-expansion ×1