AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 669013
Accepted
The Quark
The Quark
Asked: 2021-09-15 13:34:16 +0800 CST2021-09-15 13:34:16 +0800 CST 2021-09-15 13:34:16 +0800 CST

`${parameter#word}` 和 `${parameter##word}` 之间的区别?

  • 772

根据man bash:

${parameter#word}  
${parameter##word}
    Remove matching prefix pattern. The word is expanded to produce a
    pattern just as in pathname expansion, and matched against the
    expanded value of parameter using the rules described under Pattern
    Matching below. If the pattern matches the beginning of the value of
    parameter, then the result of the expansion is the expanded value of
    parameter with the shortest matching pattern (the ``#'' case) or the
    longest matching pattern (the ``##'' case) deleted. If parameter is
    @ or *, the pattern removal operation is applied to each positional
    parameter in turn, and the expansion is the resultant list.  If
    parameter is an array variable subscripted with @ or *, the pattern
    removal operation is applied to each member of the array in turn,
    and the expansion is the resultant list.

不知何故,我找不到在${parameter#word}和之间给出不同结果的情况${parameter##word}。

我正在寻找能够说明两种语法之间不同行为的情况。顺便说一句,什么是最短匹配模式,什么是最长匹配模式?

bash
  • 2 2 个回答
  • 183 Views

2 个回答

  • Voted
  1. Best Answer
    glenn jackman
    2021-09-15T15:52:13+08:002021-09-15T15:52:13+08:00

    这个例子可能更能说明问题

    $ parameter="This is a sentence with many words. Some of the words appear more than once. Oh, my word!"
    $ echo "${parameter#*word}"
    s. Some of the words appear more than once. Oh, my word!
    $ echo "${parameter##*word}"
    !
    

    所以:

    • ${parameter#pattern}删除模式的最短匹配
    • ${parameter##pattern}删除模式的最长匹配

    还有${parameter%pattern}和${parameter%pattern}匹配字符串末尾的模式。我记得区别,因为之前#出现在(美国)键盘上。 %

    • 2
  2. The Quark
    2021-09-15T13:40:49+08:002021-09-15T13:40:49+08:00

    我刚刚找到了这个例子:

    $ INT=00011
    $ echo "${INT#*0}"
    0011
    $ echo "${INT##*0}"
    11
    

    在这里,我们首先将字符串“00011”赋给变量'INT',然后我们输出以'INT'为参数,以'*0'为字型的任意一个${parameter#word}或进行参数扩展的结果。${parameter##word}

    '*0' 与参数的最小 [prefix] 匹配只是 '0',而最大 [prefix] 匹配是 '000'。

    • 1

相关问题

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve