Bash ${}及其它

bash ${} 属于参数替换一类,用man bash 可以输出完整帮助文档,查找参数替换部分可阅读帮助.

一: 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%/*}        #删除从右开始到左/ 止的所有字符,最小匹配

 

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

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

  另见例子:

    ${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

 

   /元字符是查找替换之意

 

就是说它有左trim, 右trim 及查找替换功能.

 

对应的函数原型为:

${#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 命令可以实验
=变量不存在,赋值并传回,有值(包括空值)无操作,但会传回原来值
:=变量不存在或为空,赋值并传回
-变量不存在,传回默认值,有值传原值
:-变量不存在或为空,传回默认值,非空值传回原值
+变量不存在,不操作,有值时用新值覆盖
:+变量不存在或为空,不操作,非空用新值覆盖
?变量不存在,新值输出至STDERR
:?变量不存在或为空,新值输出至STDERR

举例:
${file=my.file.txt}  :若$file 不存在,则使用 my.file.txt 作传回值,同时将$file 赋值为 my.file.txt.   
${file:=my.file.txt} :若$file 不存在或为空值,则使用my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt .

${file-my.file.txt}  :若$file 不存在,则使用 my.file.txt 作传回值。                                 
${file:-my.file.txt} :若$file 不存在或为空值,则使用 my.file.txt 作传回值。                               

${file+my.file.txt}  :若$file 不存在,不做处理,若为空值或非空值,均使用 my.file.txt 作传回值.   
${file:+my.file.txt} :若$file为非空值,则使用 my.file.txt 作传回值。                                    

${file?my.file.txt}  :若$file 不存在,则将 my.file.txt 输出至 STDERR。                          
${file:?my.file.txt} :若$file 不存在或为空值,则将 my.file.txt 输出至 STDERR。                       

 

${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

$ echo $str
000015

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

 

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

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

 

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

五: bash 的执行顺序:

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

别名,函数,内置命令,外部命令

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

六:关于bash的有用的几个辅助命令

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

alias 显示所有alias 定义
declare -F 显示所有的函数定义
declare -f 显示所有的函数定义及内容
help 给出所有的内部命令的帮助, 具体的帮助用 help <item>

hash -l 显示命令hash表
enable 判断一个命令是否是内置命令, 例如: enable ls
enable -a 列出所有的内部命令
type 也可以判断一个命令是什么类型,例如: type ls
alias,declare,enable,hash,type都是内置命令。

最常见和常用的内置命令是cd 命令,其次pwd.alias 命令,

写脚本语言常用的if then,fi;while do,done;for do,done; case in,esac;也是内部命令

用help,及enables 查看所有内部命令。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值