Bash 使用 subshel​​l 和 substring 进行错误替换

2023-12-29

一个人为的例子......给出

FOO="/foo/bar/baz"

这有效(在 bash 中)

BAR=$(basename $FOO) # result is BAR="baz"
BAZ=${BAR:0:1}       # result is BAZ="b"

这不

BAZ=${$(basename $FOO):0:1} # result is bad substitution

我的问题是哪个规则导致这个[子shell替换]评估不正确?在 1 跳中执行此操作的正确方法(如果有)是什么?


首先,请注意,当你说这句话时:

BAR=$(basename $FOO) # result is BAR="baz"
BAZ=${BAR:0:1}       # result is BAZ="b"

构造中的第一位BAZ is BAR而不是value您想要获取其第一个字符。因此,即使 bash 允许变量名包含任意字符,第二个表达式中的结果也不会是您想要的。

然而,至于阻止这种情况的规则,请允许我引用 bash 手册页:

DEFINITIONS
       The following definitions are used throughout the rest  of  this  docu‐
       ment.
       blank  A space or tab.
       word   A  sequence  of  characters  considered  as a single unit by the
              shell.  Also known as a token.
       name   A word consisting only of  alphanumeric  characters  and  under‐
              scores,  and beginning with an alphabetic character or an under‐
              score.  Also referred to as an identifier.

稍后:

PARAMETERS
       A parameter is an entity that stores values.  It can be a name, a  num‐
       ber, or one of the special characters listed below under Special Param‐
       eters.  A variable is a parameter denoted by a name.  A variable has  a
       value  and  zero or more attributes.  Attributes are assigned using the
       declare builtin command (see declare below in SHELL BUILTIN COMMANDS).

稍后当它定义您要询问的语法时:

   ${parameter:offset:length}
          Substring Expansion.  Expands to  up  to  length  characters  of
          parameter  starting  at  the  character specified by offset.

因此,手册页中阐明的规则表明${foo:x:y}构造必须有一个参数作为第一部分,并且参数只能是名称、数字或少数特殊参数字符之一。$(basename $FOO)不是参数允许的可能性之一。

至于在一个作业中执行此操作的方法,请使用其他响应中提到的其他命令的管道。

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

Bash 使用 subshel​​l 和 substring 进行错误替换 的相关文章

  • 如何在Python中按字母顺序对字符串中的字母进行排序

    有没有一种简单的方法可以在Python中按字母顺序对字符串中的字母进行排序 So for a ZENOVW 我想返回 ENOVWZ 你可以做 gt gt gt a ZENOVW gt gt gt join sorted a ENOVWZ
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • 比 BMH (Boyer–Moore–Horspool) 更快的算法

    您会使用哪种算法来搜索短文本中的短子字符串 简而言之 我的意思是子字符串有 5 10 个字符 字符串有 255 个字符 我正在考虑根据输入数据长度选择算法 哪种算法对于较长的输入更好 Try Turbo BM http www igm un
  • 如何在不同目录中启动多个窗口的 tmux?

    我想使用脚本打开一个有 6 个窗口的 tmux 会话 每个窗口位于不同的目录中 我开始于我找到的一个脚本 http blog hawkhost com 2010 07 02 tmux E2 80 93 the terminal multip
  • 如何使用 sed 将空格替换为 \(space)?

    当我使用 sed 将所有空格替换为 X 时 该命令有效 命令为 sed s X g filelist tmp 但是 当我尝试用 space 替换所有出现的空格时 代码是 sed s g filelist tmp 这不起作用 我究竟做错了什么
  • 如何在 Ruby 中转义单引号?

    我通过一个脚本 不是我的 将一些 JSON 传递到服务器 该脚本接受 JSON 作为字符串 JSON 的某些内容包含单引号 因此我想确保在传递给脚本之前对所有单引号进行转义 我已经尝试过以下方法 gt irb gt 1 9 3p194 00
  • 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

    计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么 用这个 echo substr count abca a will echo 2
  • Rust 枚举中 str/String 值的最佳实践是什么?

    我有一个非常赏心悦目的东西 但我担心它的含义 derive Eq PartialEq Debug pub enum SmtpHost DOMAIN String IPV4 Ipv4Addr IPV6 Ipv6Addr UNKNOWN lab
  • 以受限用户身份运行 monit 并使其监视需要 root 权限的进程

    我有一个用 Ruby 编写的特定脚本 需要 root 权限 大多数其他进程不需要它 因此很容易在 Monit 中设置 不是这个 服务器需要监听386 这个端口只有root可用 我不会详细说明原因 因为 1 我不是一个低级的人 2 到目前为止
  • 为数据库生成随机 ID

    我对一个项目有一个要求 我需要生成唯一的 ID ID 必须大写 我无法检查数据库以查看 ID 是否已被使用过 我们预计每个月都会有数百万条记录添加到数据库中 我在这里尝试过解决方案 PHP 如何生成随机的 唯一的字母数字字符串 https
  • Java特殊字符替换

    我有一段文字 Csukl si roham gy t rheti a sv deket annyit emlegetikmostans g ism t a sv d modellt Magyarorsz gon 在原始文本中根本没有换行符
  • Bash + sed/awk/cut 删除第 n 个字符

    我试图删除每行的第 6 7 和第 8 个字符 下面是包含文本格式的文件 实际输出 cat test 18 40 12 172 16 70 217 UP 18 42 15 172 16 70 218 DOWN 格式化后如下所示 cat tes
  • 为什么我的 Dockerfile CMD 不起作用?

    所以在我的 Dockerfile 的末尾我有这样的内容 WORKDIR home CMD django admin startproject whattt CMD bin bash 当我创建映像然后运行容器时 一切都按预期运行 没有错误 D
  • 字符串的渐进单词组合

    我需要获得字符串的渐进单词组合 例如 这是字符串 输出 这是字符串 这是 这个字符串 是字符串 这 是 细绳 你知道类似的算法吗 我需要php语言 谢谢 这是解决您问题的简单代码 我将每个字符串递归地连接到数组中的其余字符串 string
  • 用于匹配重复子字符串的单个js正则表达式?

    假设我有一个字符串 例如 where is mummy where is daddy 我想用空字符串替换任何一组重复子字符串 所以在这种情况下where and is元素将被删除 结果字符串将是 mummy daddy 我想知道是否有任何单
  • 将元组列表转换为字符串 Python

    例如 我用 python 编写了一个返回列表的函数 1 1 2 2 3 3 但我希望输出为字符串 这样我就可以用另一个字符替换逗号 这样输出就是 1 1 2 2 3 3 有什么简单的方法可以解决这个问题吗 感谢您提前提供任何提示 这看起来像
  • PHP中如何判断字母是大写还是小写?

    我有 UTF 8 格式的文本 也带有变音符号 并且想检查该文本的第一个字母是大写还是小写 这个怎么做 function starts with upper str chr mb substr str 0 1 UTF 8 return mb
  • 这种 bash 文件名提取技术有何用途?

    我有一部分 bash 脚本正在获取不带扩展名的文件名 但我试图了解这里到底发生了什么 是做什么用的 有人可以详细说明 bash 在幕后做了什么吗 如何在一般基础上使用该技术 bin bash for src in tif do txt sr
  • 如何在C中递归地找到另一个字符串中的字符串位置?

    我们有一个任务来创建带有两个字符串参数的递归函数 原型应该是这样的 int instring char word char sentence 如果我们愿意调用函数 instring Word Another Word 它应该具有以下返回值
  • 如何从 mysqldump 中删除表

    如何删除 mysqldump 中包含大量表的一个大表的输出 我有一个 6 GB 大的数据库转储 但其中 90 只是一个日志记录表 cache entries 我的备份中不再需要它 如何轻松删除转储中描述大型日志记录表的部分 我找到了这个 h

随机推荐

  • 单个 Logger 的每个附加程序的日志级别

    是否可以根据appender为单个Logger配置不同的日志级别 我意识到这与此类似question https stackoverflow com questions 1839647 how to configure log4j to l
  • 何时在 Spring 中使用自动装配

    我正在看书专业春季3 https rads stackoverflow com amzn click com 1430241071 其中有一段确实让我很困惑 该段落是关于 Spring 中的自动装配 以下是摘录 在大多数情况下 是否应该使用
  • 合成器外观和感觉中的默认按钮输入映射?

    我正在尝试使用 UIManager 获取并清除一些默认键绑定 以便空格键不会激活我的 JButtons 如所解释的here https stackoverflow com questions 12133795 removing defaul
  • strtok()函数的实现

    我需要编写我的函数 strtok 下面是我的代码 问题是 我无法显示结果字符串 在我使用的代码中strcpy 然后显示新数组 是否可以仅使用指针显示字符串 str include
  • 使用 Spring DispatcherServlet 自定义 404

    我已设置 web xml 如下 我还有一个基于注释的控制器 它接受任何 URL 模式 然后转到相应的 jsp 我已在 servlet xml 中进行了设置 但是 如果我转到以 html 结尾的页面 并且其 jsp 不存在 我不会看到自定义
  • Selenium 访问框架内的元素时出现问题

    我在验证由框架集和框架组成的页面中的元素时遇到问题 我正在使用代码 selenium selectFrame relative up selenium selectFrame topFrame 但它失败并出现错误 未找到元素 topFram
  • J2ME 支持 HTTP PUT 吗?

    我刚刚注意到 MIDP 2 0 API 中的一个奇怪的事情 HttpConnection 类 apidocs 明确引用了方法 GET POST 和 HEAD 但没有其他方法 这是否意味着它们不受支持 http java sun com ja
  • 如何在 powershell 中列出所有已安装、可运行的 cmdlet?

    我想列出 powershell 中所有已安装 可运行的 cmdlet 和函数 但是Get Command正在列出以某种方式 存在 但未加载且不可运行的 cmdlet 举个例子 Get Command lists New IseSnippet
  • 使用 Gmail Python 发送电子邮件

    我正在尝试发送电子邮件 但遇到此错误 smtplib SMTPAuthenticationError 534 b 5 7 9 Application specific password required Learn more at n5 7
  • 为什么刷新页面时 localStorage 条目会重置?

    我正在为我的班级制作一个猜谜游戏 我们应该实现一个本地存储的记分系统 我以为我理解了这个概念 但它并没有按照我想要的方式工作 当我玩游戏时 这些值存储在本地存储中 但是当我刷新时 这些值会重置 任何见解都会很棒 下面是我的脚本的开头 下面是
  • 如何在异步可运行返回值后 JUnit 测试 Android LiveData 值

    我使用 MVVM 模式 Android 生命周期组件和 LiveData 创建了一个示例登录屏幕应用程序 在存储库上 我使用延迟处理程序模拟了一些任务 如何使用处理程序测试 ViewModel 和存储库方法 由于它是异步过程 如何在可运行返
  • 自动运行脚本以运行线性回归 R

    我希望在下面的数据帧上运行线性回归 test lt data frame abc c 2 4 3 2 8 9 9 8 10 0 3 2 5 4 city1 0 c 5 3 2 6 3 5 4 7 8 4 4 5 5 city1 1 c 2
  • PyQt 类不适用于第二次使用

    我正在使用 PyQt 完全加载页面 包括 JS 并使用 Beautiful Soup 获取其内容 第一次迭代时工作正常 但之后就崩溃了 我对 Python 的了解不多 对 PyQt 的了解更少 所以非常欢迎任何帮助 借用的类here htt
  • 将字符串转换为元组而不拆分字符

    我正在努力将字符串转换为元组 而无需在此过程中拆分字符串的字符 有人可以建议一个简单的方法来做到这一点 需要一个内衬 Fails a Quattro TT print tuple a Works a Quattro TT print tup
  • 如何确定套接字listen() backlog参数的值?

    我应该如何确定侦听套接字的积压参数使用什么 简单地指定一个非常大的数字会有问题吗 这个问题的答案很长Winsock 程序员常见问题解答 http tangentsoft net wskfaq advanced html backlog 它详
  • 我必须在 django 类视图中包含authentication_classes 属性吗

    根据 Django Rest Framework 当您想要指定要使用的身份验证时 您可以在设置文件中将其设置为全局 例如 REST FRAMEWORK DEFAULT AUTHENTICATION CLASSES rest framewor
  • 变量未定义编译器错误

    我是 Excel 的长期狂热用户 但刚刚开始学习 VBA 我正在使用以下代码 但当我尝试运行时出现错误Sub test 编译错误 变量未定义 你能帮我找出问题所在吗 Option Explicit Function toFarenheit
  • Heroku 上的 pg_largeobject 访问

    我正在尝试清理 Heroku 上的 postgres 数据库 其中一些大型对象已经失去控制 我想删除不再使用的大型对象 在我的开发机器上 我可以执行以下操作 select distinct loid from pg largeobject
  • 在编译时确定整型的位数

    NOTE 我在以下位置添加了一个类似但大大简化的问题版本诸如 msg long 之类的函数与候选 msg int32 t 和 msg int64 t 的不明确重载 https stackoverflow com questions 1057
  • Bash 使用 subshel​​l 和 substring 进行错误替换

    一个人为的例子 给出 FOO foo bar baz 这有效 在 bash 中 BAR basename FOO result is BAR baz BAZ BAR 0 1 result is BAZ b 这不 BAZ basename F