shell 参数名称后带有井号和百分号的语法[重复]

2024-02-21

请解释以下语法:

  i##*.

  i%.*   

我明白它在做什么,但我想知道一般模式(为什么/如何这样做)。

出现的代码:

#!/bin/bash

recursive_name_change()
{
    cd "$1"
    for i in *
    do
        #echo "${i##*.}"
        if [ -d "$i" ]
        then
            recursive_name_change "$i"
        elif [ "${i##*.}" = "cpp" ]
        then
             new_name=${i%.*}".c"
        mv "$i" "$new_name"
        fi
        done
        cd ../
    }

recursive_name_change .

还请有人建议,我从哪里可以找到这些奇特的语法形式?


See 参数扩展 in man bash:

   ${parameter#word}
   ${parameter##word}

删除匹配的前缀模式。这个词被扩展以产生一个模式 就像路径名扩展一样。如果模式与值的开头匹配 参数,那么展开的结果就是参数展开后的值 具有最短的匹配模式(#情况)或最长的匹配模式(##案)已删除。如果参数为@或*,则模式移除 依次对每个位置参数进行运算,展开式为 结果列表。如果参数是下标为@或*的数组变量, 模式删除操作依次应用于数组的每个成员, 展开就是结果列表。

  ${parameter%word}
  ${parameter%%word}

删除匹配的后缀模式。这个词被扩展以产生一个模式 就像路径名扩展一样。如果模式匹配的尾随部分 参数的展开值,那么展开的结果就是展开后的值 具有最短匹配模式的参数值(%情况)或 最长匹配模式(%%案)已删除。如果参数为@或*, 模式去除操作依次应用于每个位置参数, 展开就是结果列表。如果参数是数组变量 下标为@或*,模式删除操作应用于每个mem- 依次计算数组的 ber,扩展就是结果列表。

简而言之,#删除左侧的图案,%从右边开始,将符号加倍会使匹配变得贪婪。 (助记符:#是在左边%在大多数键盘上)。

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

shell 参数名称后带有井号和百分号的语法[重复] 的相关文章

随机推荐

  • 翻译 Angular-UI 分页

    如何翻译 Bootstrap UI 分页指令中的文本 我已经为法语翻译覆盖了这样的常量 angular module myapp ui bootstrap constant paginationConfig itemsPerPage 10
  • 我怎样才能完成“组”活动?

    我的 Android 应用程序中有一个操作 其中包括几个活动 在此操作结束时 我需要关闭所有这些活动并返回到启动此操作的屏幕 下图解释了它是如何工作的 有什么选择可以做到这一点吗 P S 片段在我的情况下不是一个选项 有很多方法可以做到这一
  • Django 1.4 用户管理 list_filter 使用 UserProfile 字段

    编辑 我更新了代码以反映查询集过滤器中的一个错误 其中我的 user user type 已被正确的 userprofile user type 替换 我正在使用 Django 1 4 并且我知道有一个新功能可以为管理员创建自定义 list
  • R - 使用字体(extrafont)时不打印空格

    我想使用特殊字体生成 R 图 即 Cormorant Garamond Light Cormorant Light 也是可能的 问题是它适用于所有其他字体 但对于这种字体 所有空格都被忽略 library ggplot2 library e
  • 我如何知道证书的 storeName 是什么?

    我在 Windows Server 2003 中安装了证书 我从MMC看到的路径是 证书 本地计算机 个人 证书 我想在我的 wcf 配置中配置它 我如何知道 storeName 是什么 这是我到目前为止在 wcf 配置中得到的
  • 命令行开关阻止 Inno Setup 安装程序创建桌面图标

    我正在尝试为 Balsamiq Mockups 创建静默安装 该安装似乎是使用 Inno Setup 编译器创建的 作为标准静默安装的一部分 它会创建一个我希望阻止的桌面快捷方式 有谁知道相关的命令行开关来防止创建桌面图标 我尝试过使用 M
  • 如何在sql server中进行交易技术分析计算?

    我如何像在 Excel 中一样使用 T SQL 在 SQL SERVER 数据库中进行技术分析指标计算 例如平均方向指数 随机振荡指标等 如果可以的话 是否可以像在excel中做宏一样制作程序呢 提前致谢 程序代码是在 MS SQL Ser
  • 将没有“timevar”的数据帧从长格式转置/重塑为宽格式

    我有一个遵循以下长模式的数据框 Name MedName Name1 atenolol 25mg Name1 aspirin 81mg Name1 sildenafil 100mg Name2 atenolol 50mg Name2 ena
  • 使用 clojure-csv.core 解析巨大的 csv 文件

    到目前为止我有 require clojure csv core as csv require clojure java io as io def csv file getFile clojure java io resource verb
  • 从电子邮件中删除不需要的标头(出于安全风险)

    我刚刚注意到 使用 mail 函数从我的主机发送的电子邮件也会发送标头中的内部数据 例如 这是我在 Gmail 中找到的内容 通过单击显示原件 X AntiAbuse This header was added to track abuse
  • 可以在生产 Laravel 网站上运行 php artisan :clear 命令吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个托管在 DigitalOcean NGINX 服务器上的生产 Laravel 网站 每次 git 推送新更新时 我总是运行以下命令 ph
  • MySQL 左连接多对一行

    为了简化我的问题 假设我有 3 个表 Rooms People Things id name id name fk rooms id name fk rooms 1 kitchen 1 John 1 1 TV 2 2 bedroom 2 M
  • 下载 .zip 文件会运行损坏的文件 php

    我试图强制下载受保护的 zip 文件 我不希望人们在没有先登录的情况下访问它 我为以下创建了函数login等等 但我遇到了下载的文件损坏的问题 这是我的代码 file downloads filename header Content ty
  • 尝试使用 TkAgg 后端绘图时 Mac 操作系统崩溃

    当我尝试使用 TkAgg 后端进行绘图时 我的计算机将我注销 崩溃 请参见下面的示例 我正在使用 mojave 10 14 6 和 python 3 7 3 from sys import platform as sys pf if sys
  • 如何替换分页中的文本“行”

    In the 分页示例 http issues wenzhixin net cn bootstrap table options client side pagination html 如何用另一个单词替换底部的文本 行 例如 产品 显示
  • Spring Bean 在自己的线程中运行

    在我的 Web 应用程序中 我尝试使用 Java SDK7 WatchService 创建目录轮询 bean 我想要实现的是在它自己的线程中运行这个bean 这样它就不会阻塞应用程序 就像是
  • 如何将希伯来语字符放入Android JAVA文件中?

    对于安卓平台 I need to put Hebrew Character and some more like in string to check with the incoming data in java file When I p
  • 从表 b 更新表 a 其中(条件)

    晚上大家 事实上 已经是晚上了 晚上11点左右 我的大脑正在停止运转 我需要一些帮助 这样我才能完成并回家 我有两张表 表 a 和表 b 当其他两个字段匹配时 我需要使用表 b 中的字段值更新表 a 中的字段 表中的每条记录没有唯一的 ID
  • 使用 xml 模式中的节点填充 opcua 地址空间

    我正在开展一个项目 根据规范构建 opc ua 服务器 我在实现方面已经走得足够远 目前正在处理写入请求 我已经在服务器地址空间中有一些节点 看起来有很多节点 实际上也有很多 几乎不可能创建 并一一添加节点 无论如何回到问题 我已经从 op
  • shell 参数名称后带有井号和百分号的语法[重复]

    这个问题在这里已经有答案了 请解释以下语法 i i 我明白它在做什么 但我想知道一般模式 为什么 如何这样做 出现的代码 bin bash recursive name change cd 1 for i in do echo i if d