【发布时间】: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。祝你好运。