本文简单介绍linux命令行中的参数扩展的部分内容。在实际生物信息学分析中,参数扩展是十分实用的小技巧。可以用来快速处理大量的重命名文件,获取文件路径,获取文件类型,替换文件文件夹的路径等等
参数扩展可以用于对字符串的操作,主要用途包括以下:
- 字符串大小写替换
- 字符串替换
- 字符串删减
- 字符串切片
- 字符串长度
Case modification 大小写转换
${PARAMETER^}
: 第一个字母大写${PARAMETER^^}
: 全部大写${PARAMETER,}
: 第一个字母小写${PARAMETER,,}
: 全部小写${PARAMETER~}
:第一个字母大小写反转${PARAMETER~~}
:全部大小写反转
# 转换大写
$ X="abc"
$ echo ${X^}
Abc
$ echo ${X^^}
ABC
# 转换小写
$ Y="ABC"
$ echo ${Y,}
aBC
$ echo ${Y,,}
abc
# 翻转大小写
$ echo ${X~}
Abc
$ echo ${X~~}
ABC
$ echo ${Y~~}
abc
$ echo ${Y~}
aBC
Substring replace 字符串替换
${PARAMETER/PATTERN/STRING}
: 将第一个PATTERN
替换为STRING
${PARAMETER//PATTERN/STRING}
: 将所有PATTERN
替换为STRING
${PARAMETER/PATTERN}
:删除第一个PATTERN
(将第一个PATTERN
替换为nullstring)${PARAMETER//PATTERN}
:删除将所有PATTERN
#
从字符串开头开始匹配%
从字符串末尾开始匹配
MYSTRING="xxxxxxxxxx"
echo ${MYSTRING/x/y}
yxxxxxxxxx
echo ${MYSTRING//x/y}
yyyyyyyyyy
echo ${MYSTRING/#x/y}
yxxxxxxxxx
echo ${MYSTRING/%x/y}
xxxxxxxxxy
echo ${MYSTRING//x/}
# is equivalent to
echo ${MYSTRING//x}
# change suffix for a file
MYSTRING="abc.txt"
echo ${MYSTRING/txt/md}
abc.md
# change prefix for a file
echo ${MYSTRING/abc/edf}
edf.txt
Substring removal 字符串删减
${PARAMETER#PATTERN}
:删除第一个PATTERN
${PARAMETER##PATTERN}
:删除所有PATTERN
${PARAMETER%PATTERN}
:删除第一个PATTERN
(从末尾开始)${PARAMETER%%PATTERN}
:删除所有PATTERN
(从末尾开始)
$ MYSTRING="This is a simple sentence with some simple words."
$ echo ${MYSTRING#*simple}
sentence with some simple words.
$ echo ${MYSTRING##*simple}
words.
$ echo ${MYSTRING%simple*}
This is a simple sentence with some
$ echo ${MYSTRING%%simple*}
This is a
$ Get name without extension
MYFILEPATH="/home/work/example.txt"
$ echo ${MYFILEPATH%.*}
/home/work/example
# Get extension
$ echo ${MYFILEPATH##*.}
txt
# Get directory name
echo ${MYFILEPATH%/*}
/home/work
# Get filename
$ echo ${MYFILEPATH##*/}
example.txt
String slicing 字符串切片
${PARAMETER:OFFSET}
:OFFSET
指从起始位置的偏倚${PARAMETER:OFFSET:LENGTH}
:OFFSET
指从起始位置的偏倚,可以为空,LENGTH
则指偏移后截取的长度,负数则指截取到到末位前的长度。
a=myfile.txt.gz
echo $a
myfile.txt.gz
echo ${a::-3}
myfile.txt
echo ${a:2}
file.txt.gz
echo ${a:2:-3}
file.txt
String length 字符串长度
${#PARAMETER}
: 获取变量所指字符串的长度
$ MYSTRING="abcd"
$ echo ${#MYSTRING}
4
Indirection 间接指向
${!PARAMETER}
`间接指向变量所指字符串所表示点变量
$ A=1
$ B="A"
$ echo $B
A
$ echo ${!B}
1
参考
https://wiki.bash-hackers.org/syntax/pe
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html