【问题标题】:How the regular expression getting expanded?正则表达式如何扩展?
【发布时间】:2019-11-11 13:51:15
【问题描述】:

我有下面的 shell 脚本和输出如下。正则表达式是如何扩展的,实际文件是如何打印在当前目录中的?

脚本

echo "1: $dest_file_pattern"
dest_file_pattern=$(echo $dest_file_pattern | sed -e 's/\r//g')
echo "2: $dest_file_pattern"

输出

1: employee_p000_fr_*.*.pgp
2: employee_p000_fr_20191109141001734.txt.pgp employee_p000_fr_20191110141057316.txt.pgp

我的要求是保留正则表达式,去掉回车。

【问题讨论】:

  • 首先,这里没有正则表达式; dest_file_pattern(最初)包含一个 glob,当您有 dest_file_pattern 的未引用扩展时,shell 使用路径名扩展来扩展它。之后,sed 只是读取一系列文件名,可能什么也不做,因为文件名中不太可能有任何回车。 (这是可能的,但我觉得您的意图是去除您认为扩展会添加的尾随回车。不过,bash 不会在结果文件名中添加任何回车。 )
  • 你想用sed -e 's/\r//g'实现什么? $dest_file_pattern 是否包含 \r
  • 您是否要从多个文件中删除回车符?
  • 通过设置set -x 来了解调试脚本以查看每个变量使用的值。通常,您希望引用所有对变量名称的引用,例如echo "$dest_file_pattern" | ... 将代码一次一行复制/粘贴到终端命令行,以便了解每个步骤中发生的情况。对于var=$(some_cmds ...)这样的情况,单独执行some_cmds,从左边开始,一次加| next_cmd。祝你好运。

标签: bash shell unix


【解决方案1】:

使用echo $dest_file_pattern,您的shell 将在执行echo 之前扩展文件名模式。

使用

dest_file_pattern=$(echo "$dest_file_pattern" | sed -e 's/\r//g')

【讨论】:

    猜你喜欢
    • 2016-09-26
    • 2016-12-02
    • 2012-03-06
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多