bash - glob不起作用后的bash替换?
问题描述
我遇到了 bash 字符串替换的奇怪行为。
我希望在 $r1 和 $var 上进行相同的替换会产生完全相同的结果。两个字符串似乎具有相同的值。
但事实并非如此,我无法理解我错过了什么......
也许是因为地球?我只是不知道......我不是纯粹的 IT 人员,也许这对你来说是显而易见的。
(底部是 Repl.it 链接)
mkdir -p T21805
touch T21805/T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz
r1=T21805/*R1*
echo $r1;
echo ${r1%%_S1*z}
var=T21805/T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz
echo ${var%%_S1*z}
echo $r1| hexdump -C
echo $var | hexdump -C
输出 :
回声 $r1
T21805/T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz
回声 ${r1%%_S1*z}
T21805/T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz
回声 ${var%%_S1*z}
T21805/T21805_SI-GA-D8-BH25N7DSXY
回声 $r1| 十六进制转储 -C
00000000 54 32 31 38 30 35 2f 54 32 31 38 30 35 5f 53 49 |T21805/T21805_SI|
00000010 2d 47 41 2d 44 38 2d 42 48 32 35 4e 37 44 53 58 |-GA-D8-BH25N7DSX|
00000020 59 5f 53 31 5f 4c 30 30 31 5f 52 31 5f 30 30 31 |Y_S1_L001_R1_001|
00000030 2e 66 61 73 74 71 2e 67 7a 0a
|.fastq.gz.| 0000003a
回声 $var | 十六进制转储 -C
00000000 54 32 31 38 30 35 2f 54 32 31 38 30 35 5f 53 49 |T21805/T21805_SI|
00000010 2d 47 41 2d 44 38 2d 42 48 32 35 4e 37 44 53 58 |-GA-D8-BH25N7DSX|
00000020 59 5f 53 31 5f 4c 30 30 31 5f 52 31 5f 30 30 31 |Y_S1_L001_R1_001|
00000030 2e 66 61 73 74 71 2e 67 7a 0a
|.fastq.gz.| 0000003a
我有兴趣了解为什么这不起作用,例如,我可以使用 sed 实现我想要的输出。
解决方案
之后我运行它set -xv
以查看 r1 的内容。
$ r1=T21805/*R1*
+ r1='T21805/*R1*'
$ var=T21805/T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz
+ var=T21805/T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz
的是。r1
_$ {r1 %% _ S1 * z}
T21805 / * R1 *
r1
不包括_S1 * z
.
推荐阅读
- networking - Kubernetes 网络策略停止到 Pod 的所有流量
- reactjs - React 在现有状态转换期间无法更新
- cmd - 为什么在使用 assoc 命令将特定扩展名更改为另一个不同时在 windows 中打开程序没有任何改变?
- php - 为onclick javascript函数传递参数时如何在php中添加单引号?
- c - 如何使用 strdup 分配具有给定 char 数组的结构?
- python - HIVE 没有与 Python 连接?
- python - 如何在使用 selenium 时输入文件名并按 Enter 上传文件
- git - 无法从 Docker 上运行的 Git 存储库中提取
- html - 本地连接css字体
- c++ - 如何修复链表类实现的未处理异常 0xDDDDDDDD?