记录平时遇到的有意思的脚本知识。
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
本文由 waynelone 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。