Bash Shell 脚本的学习

in Code with 0 comment

记录平时遇到的有意思的脚本知识。

shell 变量

${1#-}

${1#-} - 在学习Docker时,观摩别人写的 Dockerfile 时,看到这么一行,一直不明白其意思,经过不断的搜索,答案还是被我找到了,其中数字 1 指的就是 $1 传给脚本的第二个参数(第一个参数是脚本本身),大括号中 #- 号的意思是以 -为准,删除-及其左侧的字符(更加详情的信息请参阅 Shell中的${}、##和%%的使用)。

file=/dir1/dir2/dir3/my.file.txt

echo ${file#*/}
# 删除第一个 / 及其左边的字符串
# dir1/dir2/dir3/my.file.txt

echo ${file##*/}
# 删除最后一个 / 及其左边的字符串
# my.file.txt

echo ${file#*.}
# 删除第一个 . 及其左边的字符串
# file.txt

echo ${file##*.}
# 删掉最后一个 . 及其左边的字符串
# txt

echo ${file%/*}
# 删掉最后一个 / 及其右边的字符串
# /dir1/dir2/dir3

echo ${file%%/*}
# 删掉第一个 / 及其右边的字符串
# 空

echo ${file%.*}
# 删掉最后一个 . 及其右边的字符串
# /dir1/dir2/dir3/my.file

echo ${file%%.*}
# 删掉第一个 . 及其右边的字符串
# /dir1/dir2/dir3/my
记忆的方法为:
# 去掉左边(键盘上 #$ 的左边);% 是去掉右边(键盘上 %$ 的右边)。单一符号是最小匹配;两个符号是最大匹配。
${file:0:5} 提取最左边的5个字符,结果为:/dir1
${file:5:5} 提取第5个字符的右边的连续5个字符,结果为:/dir2
Comments are closed.