Bash 内置函数及其它

来源:互联网 发布:怎样设计淘宝店铺 编辑:程序博客网 时间:2024/05/29 18:25

一: bash 字符串操作:
例: FILE_NAME="/usr/local/world.txt"
1. 取字符串长度
    ${#FILE_NAME}
2. 取子串

    ${FILE_NAME:10}    #从位置10开始取字串

     $(FILE_NAME:5:10}    #从位置5开始,取10个字符


3. 删除字符串(匹配)
    ${FILE_NAME##*/}    #删除从左开始到/ 止的所有字符, 最大匹配
    ${FILE_NAME#*/}        #删除从左开始到/ 止的所有字符, 最小匹配
    ${FILE_NAME%%/*}    #删除从右开始到左/ 止的所有字符,最大匹配

    ${FILE_NAME%/*}        #删除从右开始到左/ 止的所有字符,最小匹配

 关键是理解#,%,*元字符的作用,#是左,%是右开始,*多字符匹配。

  上面那个/是普通的字符。不要混淆。

  另见例子:

    ${FILE_NAME#*local}, ${FILE_NAME##*local}

    ${FILE_NAME%*local} ${FILE_NAME%%*local}


4. 替换字符串 (也使用匹配操作)
    ${FILE_NAME/world.txt/hello.txt}     # 将world.txt 替换成hello.txt
    ${FILE_NAME//w/W}            # 将w 全部换成 W

   /元字符是查找替换之意


对应的函数原型为:

${#string}  $string的长度

${string:position}  在$string中, 从位置$position开始提取子串
${string:position:length}   在$string中, 从位置$position开始提取长度为$length的子串

${string#*substring}     从变量$string的开头, 删除最短匹配$substring的子串
${string##*substring}    从变量$string的开头, 删除最长匹配$substring的子串
${string%*substring}     从变量$string的结尾, 删除最短匹配$substring的子串
${string%%*substring}    从变量$string的结尾, 删除最长匹配$substring的子串

${string/substring/replacement}     使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement}    使用$replacement, 代替所有匹配的$substring

可见, bash 内置函数,其函数名称,输入参数,调用方法,返回值与|C 非常不同。

它用了一种更简单的书写方式。


用echo 命令可以实验

${var:-} 附缺省值, 不传递给子shell

${var:=}赋缺省值,传递给子shell

$(var:?} 检查变量是否存在,

$(var:+), 变量覆盖,但原变量的值并不会改变。

${var:n:m} 取字串,前面有例子

$(var} (%,#,%%,##)操作根据模板删除字串,前面说过

(//) 字符串替换,前面说过。


二: Bash 取得命令行参数
$#, $1,$2,$3
枚举命令行参数: for a in $@ { echo $a; }
----------------------------------------
三:执行bash如何让命令回显?
bash -v test.sh
或#!/bin/bash -v


-x 执行前打印

-n 只运行不执行

----------------------------------------
四: bash 输出等宽数字到变量

printf -v str "%06d\n" 15

----------------------------------------


其它: bash 替换字符串中的/为空格, 还得借助sed 才比较方便:

echo $FILE_NAME |sed 's#/# #g'