if 结构什么时候不需要括号?

2023-12-08

我正在为 shell 脚本编写课程做一些作业,并且有一个问题要求我编写一个脚本来测试输入的参数是否是有效的 shell 变量名称。下面的脚本似乎工作正常。

if echo "$1" | grep -v ".*[^A-Za-z_]" > /dev/null
then
        echo yes
else
        echo no
fi

我知道括号是 BASH shell 中测试函数的简写。我的问题是,当我尝试使用括号执行上述脚本时,出现错误。

if [ echo "$1" | grep -v ".*[^A-Za-z_]" > /dev/null ]

这个问题(我相信)是 grep 试图使用 ] 作为其参数,从而导致脚本运行时出现错误。

什么情况下不需要括号?


[实际上是一个命令(它恰好内置于大多数 shell 中),而不仅仅是语法的一部分if陈述。

The if语句执行作为其参数的命令。如果该命令succeeds (sets $?为零),则条件为真;如果它fails (sets $?到某个非零值),条件为假。

内置的[命令几乎完全等同于test命令;区别在于[需要]作为它的最后一个参数。

也可以看看https://unix.stackexchange.com/a/22728/10454

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

if 结构什么时候不需要括号? 的相关文章

  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 将以反斜杠结尾的行与下一行 awk 连接起来(来自著名的 awk 单行解释)

    这个练习来自于Peteris Krumins 的博客文章解释了 AWK 的俏皮话 http www catonmat net blog awk one liners explained part two 本质上是这条线 awk sub ge
  • 在 Bash Linux 中,如果给定进程运行时间超过指定时间,如何获取通知?

    我一切顺利 我的程序在大约 N 秒内完成 maybe deadlock 但有时会随机发生死锁 导致程序永远挂起 为了调试这个 我想按照以下方式运行该程序 如何调试罕见的死锁 https stackoverflow com questions
  • 如何使用 docker ENTRYPOINT 与 shell 脚本文件组合参数

    我编写 shell 脚本文件并将其与 docker ENTRYPOINT 一起使用 但是当我运行 docker image 时 由于入口点代码行 它只是停止而没有任何错误日志 我的 Dockerfile FROM ubuntu 16 04
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 比较两个文件的单列

    我有两个文件 每个文件都有两列 并用空格分隔 我想找到两个文件中第 2 列不相同的行 并将它们输出到第三个文件 file A 1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 2 BBBBBBBBBBBBBBBBBBBBBB
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • bash 子 shell 中出现陷阱“kill 0”的分段错误

    我正在尝试编写一个并行构建多个 Dockerfile 的小脚本 但是如果我想取消该脚本 我也想杀死子进程 这样做的结果是segmentation fault 不知道为什么 为了澄清我正在杀死脚本 C trap kill 0 SIGINT S
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • Bash - 将键绑定到字符串(不是函数)

    如何获得键绑定以导致在命令行插入任意文本 在 zsh 中我这样做 bindkey s m myspecialscript 在 bash 中 有等效的吗 没有一个内置函数可以实现我想要的功能 bind e E home yourscript
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • GitHub Actions:如何将 toJSON() 结果传递给 shell 命令

    因此 我正在与 Github Actions 合作进行端到端测试 我正在查看的设置是让一项作业检索要测试的 url 列表 而我的第二项作业使用该列表创建一个矩阵并测试所有这些 我的问题是 当我实际运行测试脚本时 必须从命令行完成 因为我使用

随机推荐

  • 具有不同 .net 框架的虚拟目录

    IIS 中的同一网站下是否可以有两个虚拟目录 但虚拟目录使用不同版本的 net 框架 例如 在默认网站下 我可以有一个针对2 0框架的虚拟目录和第二个针对1 1框架的虚拟目录吗 这是针对 IIS 6 的 谢谢 您并不是说您正在使用哪个版本的
  • htaccess 删除 .php 并保留查询字符串

    这是我现在的 htaccess 文件 RewriteEngine On RewriteBase RewriteCond REQUEST FILENAME f RewriteCond REQUEST FILENAME d RewriteRul
  • PostgreSQL 使用内连接删除

    DELETE B FROM m productprice B INNER JOIN m product C ON B m product id C m product id WHERE C upc 7094 AND B m pricelis
  • Heroku:您要查找的页面不存在

    当我尝试将应用程序部署到 Heroku 时 出现此错误 在我做之前我的第一次部署工作正常heroku run rake db reset 此后 我出现以下错误 很抱歉 但出了点问题 和 您要查找的页面不存在 您可能输入了错误的地址 或者页面
  • R 在空行上分割文本

    我有一个很长的文件 如下所示 Ach Hans Run 2RRGG Enchantment At the beginning of your upkeep you may say Ach Hans run It s the and name
  • 带有 Unicode 字符的 iOS NSLog 错误

    谁能告诉我以下结果差异的原因 completionHandler NSArray placemarks NSError error NSLog n placemarks placemarks 结果 placemarks U039b U03b
  • 为什么我的新视图控制器没有出现?

    我正在使用以下代码来推送我的视图控制器 除非按下 UIButton 时 除了 NSLog 语句之外没有任何反应 IBAction doChangePasscode NSLog Change Passcode Screen Loaded Ch
  • 我可以配置 GitHub 来阻止大文件吗

    有关大文件的 GitHub 文档 states 如果您尝试添加或更新大于 50 MB 的文件 您将收到来自 Git 的警告 GitHub 会阻止超过 100 MB 的推送 我想对其进行配置 使其阻止任何大于某个预定义阈值 例如 100kb
  • 如何隐藏 URL 中的特定文件扩展名(html 和 php)?

    Options MultiViews RewriteEngine On RewriteCond REQUEST FILENAME d RewriteRule 1 php L RewriteCond REQUEST FILENAME php
  • 使用 asyncio 的 Python 简单套接字客户端/服务器

    我想使用 asyncio 协程而不是多线程重新实现我的代码 服务器 py def handle client client request None while request quit request client recv 255 de
  • SQL Server 中的 OR 运算符短路

    我想咨询SQL Server OR短路 Code DECLARE tempTable table id int INSERT tempTable id values 1 DECLARE id varchar 10 SET id x SELE
  • 有没有办法在 Internet Explorer 中使用 window.hasOwnProperty() ?

    我有一个在 Firefox 中完美运行的方法 用它我可以确定特定 javascript 对象的实例的名称 请不要问我为什么需要它 Fr 示例 var temp new String hello var theName getVarName
  • 杀死挂起的子进程

    我的 Perl 脚本运行一个外部程序 它采用单个命令行参数 并处理其输出 最初 我是这样做的 my result prog arg 然而 事实证明该程序存在缺陷 并且在极少数情况下会意外挂起 如果程序在一段时间后没有退出 我该如何终止它 该
  • 使用不同时如何限制值

    PHP SELECT DISTINCT bk title AS Title bk year AS Year aut authorname AS Author cat category AS Category FROM book bk JOI
  • 未找到 gem 内的 Rake 任务

    我已经实现了什么edebill建议在他的回答 to 这个问题 如果我以通常的方式指向 gem 并将其安装在我的环境中 gem activerecord datawarehouse rake T 不显示我的 rake 任务 但如果我直接指向
  • PHP - 让服务器 ping 访客 IP 并在毫秒内返回 ping

    我想做的就像标题所说的那样 要 ping 用户 IP 并以毫秒为单位返回结果 例如 平IP 返回400ms 我不知道如何做到这一点 但我希望它会相对简单 我可以访问 exec 函数和类似的函数 因为我将在虚拟专用服务器上运行此脚本 提前致谢
  • 为什么在 XCode 调试器中使用“Step over”功能会隐藏本应较强的弱属性的问题

    我刚刚调试完 iOS Google 地图 GMSMapView 在某些设备和某些 iOS 版本模拟器中显示 但在其他设备上则不显示 奇怪的是 它在 32 位 iOS 7 设备和 64 位 iOS 7 模拟器上崩溃 但在其他组合上却没有崩溃
  • 使用 JavaScript 获取文本框值或内容的长度

    这让我抓狂 我有这段代码并且它可以工作 我正在尝试在沉迷于 JQuery 之前学习 JavaScript 我的示例项目涉及获取文本框的值 并根据其长度进行验证 表格的名称是会员资格 示例 这有效 可能只是因为拼写错误length here
  • 如何让用户在一段时间不活动后自动注销?

    在网上进行了大量搜索后却一无所获 我想知道是否有一种简单的方法可以在非活动期后自动注销通过 Symfony Security 登录的用户 例如 我希望用户在 30 分钟不活动后注销 我使用自定义用户提供程序 例如this 但用户登录系统后
  • if 结构什么时候不需要括号?

    我正在为 shell 脚本编写课程做一些作业 并且有一个问题要求我编写一个脚本来测试输入的参数是否是有效的 shell 变量名称 下面的脚本似乎工作正常 if echo 1 grep v A Za z gt dev null then ec