全局替换后的bash无效?

问题描述 投票:0回答:1

我在用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

输出:

echo $ r1

T21805 / T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz

echo $ {r1 %% _ S1 * z}

T21805 / T21805_SI-GA-D8-BH25N7DSXY_S1_L001_R1_001.fastq.gz

echo $ {var %% _ S1 * z}

T21805 / T21805_SI-GA-D8-BH25N7DSXY

echo $ r1 | hexdump -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

echo $ var | hexdump -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

Repl.it

我有兴趣了解为什么它不起作用,例如,我可以使用sed实现我的期望输出。

bash substring substitution
1个回答
0
投票

我在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

© www.soinside.com 2019 - 2024. All rights reserved.