因为并不常用到linux,所以确实不怎么会,只能现学了。我不明白,为什么这个脚本里面高亮的一行i=${i/_1.fq/}
会报错呢,我只能用上面那一行i=${i%_1.fq}
。
一、配置变量
原则:等号两边不能加空格;变量名称开头不能是数字;变量内容若有空格可使用双引号 " 或单引号 ' 将变量内容结合起来,但双引号内的特殊字符如$等可以保有原本的特性,单引号内的特殊字符则仅为纯文本;可用跳脱字符 \ 将特殊符号如$等变成一般字符,\后面不要加空格,只能跳脱\紧挨着的一个字符;在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号`命令` 或 $(命令),先执行这些命令;若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如PATH="$PATH":/home/bin
,PATH=${PATH}:/home/bin
(也可以是PATH=$PATH:/home/bin
,但其它变量不能这样);通常大写字符为系统默认变量,自行配置变量可以使用小写字符。
$ echo $read #未配置的变量为空
$ read=”sample_reads_1.fq.gz” #配置变量
$ echo $read #查看变量内容
sample_reads_1.fq.gz
$ echo ${read} #查看变量内容
sample_reads_1.fq.gz
$ unset read #取消变量
$ echo $read
$ read=sample_reads_1.fq.gz #配置变量
$ echo ${#read} #获取字符串变量的长度
20
二、截取字符
$ echo ${read:7} #截取第7个字符后面的所有字符,不包括第7个字符
reads_1.fq.gz
$ echo ${read:7:4} #截取第7个字符后面的4个字符,不包括第7个字符
reads
$ echo ${read:0-5} #截取倒数第5个字符后面的所有字符,包括倒数第5个字符
fq.gz
$ echo ${read: -5} #把0换成空格也可
fq.gz
三、匹配字符的截取
- 一个#,若变量内容从头开始的数据符合关键词,则将符合的最短数据删除
- 两个##,若变量内容从头开始的数据符合关键词,则将符合的最长数据删除
- 一个%,若变量内容从尾向前的数据符合关键词,则将符合的最短数据删除
- 两个%%,若变量内容从尾向前的数据符合关键词,则将符合的最长数据删除
- ${变量/旧字符串/新字符串},若变量内容符合旧字符串,则第一个旧字符串会被新字符串取代
- ${变量//旧字符串/新字符串},若变量内容符合旧字符串,则全部的旧字符串会被新字符串取代
- ${变量/旧字符串/} 或 ${变量/旧字符串},可删除匹配的第一个字符串
- ${变量//旧字符串/} 或 ${变量//旧字符串},可删除匹配的所有字符串
- (以上这些操作并没有改变原变量)
$ echo ${read#*.}
fq.gz
$ echo ${read##*.}
gz
$ echo ${read%.*}
sample_reads_1.fq
$ echo ${read%%.*}
sample_reads_1
$ echo ${read/sample/test}
test_reads_1.fq.gz
$ echo ${read/sample/}
_reads_1.fq.gz
$ echo ${read/sample}
_reads_1.fq.gz
$ echo ${read//_//}
sample/reads/1.fq.gz
网友评论