:(冒号)GNU Bash 内置函数的用途是什么?

2024-02-22

一个不执行任何操作的命令的目的是什么,它只不过是一个注释领导者,但实际上它本身就是一个内置的 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'
while : ; do command ; done

我想我真正想要的是它可能有什么历史应用。


历史上, 伯恩炮弹没有true and false作为内置命令。true相反,只是简单地别名为:, and false类似的东西let 0.

:略好于true以便移植到古老的 Bourne 衍生的 shell。举一个简单的例子,考虑既没有!管道运营商也不是||列表运算符(就像一些古老的 Bourne shell 的情况一样)。这使得else的条款if语句作为基于退出状态进行分支的唯一方法:

if command; then :; else ...; fi

Since if要求非空then子句和注释不算为非空,:充当空操作。

Nowadays(即:在现代环境中)您通常可以使用: or true。两者都是 POSIX 指定的,有些发现true更容易阅读。然而,有一个有趣的区别::是所谓的 POSIX特殊内置, 然而true is a 常规内置.

  • 需要在外壳中内置特殊的内置函数;常规内置函数只是“通常”内置的,但并不能严格保证。通常不应该有一个名为:与功能true在大多数系统的 PATH 中。

  • 也许最关键的区别是,对于特殊的内置程序,内置程序设置的任何变量(即使是在简单命令评估期间的环境中)在命令完成后仍然存在,如使用 ksh93 所示:

    $ unset x; ( x=hi :; echo "$x" )
    hi
    $ ( x=hi true; echo "$x" )
    
    $
    

    请注意,Zsh 会忽略此要求,GNU Bash 也会忽略此要求,除非在 POSIX 兼容模式下运行,但所有其他主要的“POSIX sh 派生”shell 都会遵守此要求,包括 dash、ksh93 和 mksh。

  • 另一个区别是常规内置函数必须兼容exec- 此处使用 Bash 进行演示:

    $ ( exec : )
    -bash: exec: :: not found
    $ ( exec true )
    $
    
  • POSIX 还明确指出:可能比true,尽管这当然是特定于实现的细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

:(冒号)GNU Bash 内置函数的用途是什么? 的相关文章

  • bash、zsh :声明 [*] (天哪)

    我正在使用具有以下语法的 bash 脚本 declare a THIS 这在 zsh 中似乎是非法的 我收到 未找到匹配项 THIS 错误 谁能帮我把它翻译成 zsh 吗 另外 什么是 语法是什么意思 我知道我们正在声明一个数组 但为什么要
  • 内置魔术变量名称/属性

    背景 对于不熟悉的人来说 崇高的文字 http sublimetext com 和 TextMate 通过以下定义的范围提供语法突出显示和其他功能 tmLanguage语言定义文件 基本上是一堆正则表达式 用于识别给定语言中的各种构造 例如
  • 参考当前命令的先前参数

    例如 我想执行以下操作 mv xxxx xxxx bak 我知道我可以使用这个命令 mv xxxx bak 我认为这在某种程度上并不直接 如果我能做到这一点那就太好了 mv xxxx 1 bak 有时我需要这样 echo xxxx yyyy
  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区
  • 将所有脚本参数复制到另一个变量

    我需要复制所有脚本参数并将它们传递给另一个脚本 我尝试这样做 args printargs sh args echo printargs sh args 但在这种情况下 如果我使用包含空格的参数调用我的父脚本 例如 script sh ar
  • xdotool 类型需要很长时间并导致整个桌面冻结

    我一直在使用xdotool type过去只能在快捷方式上输入耸肩xdotool type 这可行 但总是需要相当长的时间 并导致整个桌面冻结 完全冻结 而不仅仅是输入 几秒钟 不过并没有太打扰我 现在我需要一种方法来从文件中读取内容 对其进
  • sed-删除不包含模式的行

    我很惊讶我在 SO 上找不到与此类似的问题 如何使用 sed 删除所有不包含特定模式的行 例如 我有这个文件 cat kitty dog giraffe panda lion tiger 我想要一个 sed 命令 当调用该命令时 它将删除所
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • ANSI 转义码在行尾有奇怪的行为

    重现步骤 考虑以下 shell 命令 echo e e 41mTest nTest2 e 0mTest3 它打印Test并在下一行中Test2具有红色背景 使用 ANSI 转义码 Test2后面直接是Test3这是无色的 行为 第一次执行此
  • IFS 分隔一个字符串,如“Hello”,“World”,“this”,“is,一个无聊”,“line”

    我正在尝试解析 csv 文件 但 IFS 遇到一些问题 该文件包含如下行 Hello World this is a boring line 各列用逗号分隔 因此我尝试使用以下代码分解该行 IFS read r a tempArr lt l
  • 使用 Jenkins 运行 ios-sim

    我正在尝试使用以下命令从命令行启动我的应用程序ios sim https github com downloads pegli ios sim ios sim xcode4 3 tar gz但这就是我得到的 Started by user
  • 执行 rvm use 2.0.0 --default 时收到“警告!路径未正确设置”

    以上第一次不起作用 第二次起作用 尝试将任何新 shell 窗口的 ruby 版本设置为 2 0 0 Doing rvm use 2 0 0 default gives Warning PATH is not properly set up
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123
  • 是否有可能在linux中找到包含特定文本的文件?

    考虑这种情况 我在文件夹 Example 下有很多文件 如果我需要找到一个包含特定短语 如 Class Example 的文件 我该如何使用 Linux shell 来做到这一点 linux中有类似 定位 的函数可以做到这一点吗 Thank
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 如何在 mac 中使用“getopt”命令让 bash 处理长参数?

    我想让我的 bash 脚本处理长参数 我发现getopt 但 OS X 不支持它 谁能告诉我为什么getoptBSD 实现了 GNU 没有实现 我尝试构建getopt在 GNU C lib 中 但由于我对 Linux 的技能不佳而失败了 有
  • 在powershell中检查文件是否可读且正常

    我是 powershell 新手 我想检查文件是否可读且正常 在 unix 中 我们可以使用 f 和 r 在一行中完成此操作 例如 以下 shell 脚本函数接受文件名作为参数并检查文件的可读性和规律性 与此等效的 powershell 是

随机推荐

  • 在 C++ 中设置默认浮点打印精度

    我想在比较过程中控制双精度数的精度 然后使用 C 恢复到默认精度 我打算使用setPrecision 设置精度 那么将精度设置回默认值的语法 如果有 是什么 我正在做这样的事情 std setPrecision math log10 m F
  • 向 xml 文档添加注释

    Code from lxml import etree Create the network XML file tree root etree Element network tree etree ElementTree root Crea
  • 编译元素导致输入插入符位置移动到末尾

    我的指令有问题 该指令的目的是轻松添加验证 而无需手动将 ng class 除其他外 添加到元素中以便显示错误状态 我只是想在我的元素上放置一个 验证 指令 并在出现错误状态时生成适当的类 和错误消息 就验证而言 它运行良好 但会产生奇怪的
  • 自定义路由类

    在 symfony 1 4 中 您可以定义自定义路由类 在其中使用自定义逻辑覆盖 url 的生成 例如 custom class sfDoctrineRouteCollection options model Custom prefix p
  • 如何在jquery中选择一个元素及其子元素? [复制]

    这个问题在这里已经有答案了 我有一个 div 其中包含更多 div 这些 div 内部包含 table div 我怎样才能在jquery中选择这个父div及其子div 父 div 有类 AccordionTitle AccordionTit
  • 当我尝试使用 Rakudo 运行脚本时,为什么会出现“被零除”错误?

    我刚刚构建了 Rakudo 和 Parrot 这样我就可以使用它并开始学习 Perl 6 我下载了 Perl 6 书 并愉快地输入了第一个演示程序 网球锦标赛示例 当我尝试运行该程序时 出现错误 Divide by zero current
  • 即使活动发生变化,如何保持 Android 客户端与服务器的连接并向服务器发送数据?

    我最初在我的活动中实现了一个异步任务 将数据发送到服务器 但是当我改变活动时 连接就丢失了 为了避免这种情况 我的方法是实现一个集中网络操作并将数据发送到服务器的服务 该服务的代码如下 import java io BufferedWrit
  • Rxjs 将 Json 文档中的数组映射到新的数组类型

    我正在 Angular 服务中从 PouchDB 检索文档 该文档以以下格式检索 id segments rev 1 4f0ed65cde23fe724db13bea1ae3bb13 segments name Aerospace name
  • 并发 Sql Server 连接数

    我正在创建一个带有 Sql Server 数据库引擎的 net 应用程序 我希望每秒有数千名用户访问我的网站 连接数靠什么 IIS 和 Sql Server 可以容纳多少个连接 首先 连接和连接池之间存在区别 研究一下这一点是不是很好 因为
  • RabbitMQ 用户在预先创建的队列上发布/订阅的权限

    我有一个用例 我需要创建一个用户并授予他仅在现有队列上发布 订阅的权限 这是一个示例 虚拟主机 mainvhost 对于所有用户都相同 在虚拟主机内 我有 A foo 和 Q bar 队列 用户 foo 只能发布 订阅到 Q foo 用户
  • 如何断言不为空?

    我对 javascript 测试非常陌生 我想知道如何在中断言 not nullMocha框架 Mocha 支持您想要的任何断言库 您可以在此处查看它如何处理断言 http mochajs org assertions http mocha
  • Primefaces 仅更新选定的选项卡

    我有一种情况 当触发 选择 事件时 我想更新页面上的多个组件 However 其中两个位置位于 tabView 内 我只想更新这些组件 如果它们位于当前选定的选项卡内 我suspect我正在寻找的是这样的东西
  • 与“开始调试”相比,“附加到进程”有什么优势?

    我是编程新手 我知道之前只开始调试 也许启动调试套件以更好地开发一些小型应用程序 我发现 Visual Studio IDE 提供了另一种附加到进程的方法供使用 何时以及为何必须使用附加调试 比如多线程应用程序的调试 客户端 服务应用程序调
  • 如何读取大型 Sqlite 文件并从资产文件夹复制到 Android 模拟器或设备中?

    我想很多人已经读过这篇文章 在 Android 应用程序中使用您自己的 SQLite 数据库 http www reigndesign com blog using your own sqlite database in android a
  • ASP.Net 动态数据还是 MVC2?

    我一直在使用 Web 表单 并且我想根据一些事实和我在其中看到的其他优点切换到 MVC 模式 当我遇到最新的动态数据 过去称为动态数据模板 时 我对 MVC 审查进展顺利 如果我错了 请纠正我 但我相信在后端 MVC2 和 DD 都使用 M
  • 在其他桌面、Python、Windows 上启动进程

    我创建了第二个桌面 import win32api win32con win32gui win32service win32process import pywintypes import traceback thread time cSt
  • CloudKit - 具有依赖项的 CKQueryOperation

    我刚刚开始使用 CloudKit 所以请耐心等待 背景信息 苹果在 WWDC 2015 上发表了有关 CloudKit 的演讲https developer apple com videos wwdc 2015 id 715 https d
  • 如何审计Spring data jpa @Query?

    为了审核记录所有数据库更改 我们实现了 HibernateInterceptor org hibernate Interceptor 我们可以记录使用 JpaRepository 执行的查询的审核 我们使用的拦截器 示例 import ja
  • 如何获取特定子字符串后面的字符串?

    如何获取特定子字符串之后的字符串 例如 我想获取之后的字符串 world in my string hello python world I m a beginner 在本例中是 I m a beginner 最简单的方法可能就是分割你的目
  • :(冒号)GNU Bash 内置函数的用途是什么?

    一个不执行任何操作的命令的目的是什么 它只不过是一个注释领导者 但实际上它本身就是一个内置的 shell 它比每次调用在脚本中插入注释要慢大约 40 这可能会根据注释的大小而有很大差异 我能看到的唯一可能的原因是 poor man s de