## 1.4.5 declare声明变量
> declare [+/-][选项] 变量名
>
> 选项说明:
>
> -/+:给变量设定类型属性,取消给变量设定的类型属性
>
> -i:声明为整型
>
> -x:声明为环境变量
>
> -p:显示变量名和值
例如,声明一个环境变量 declare -x str ,取消该变量 declare +x str 。
1.4.6 位置变量和特殊变量
> $?:上一条代码执行的回传指令,回传0表示标准输出,即正确执行,否则为标准错误输出。
>
> $$:当前shell的PID。除了执行bash命令和shell脚本时,$$不会继承父shell的值,其他类型的子shell都继承。
>
> $BASHPID:当前shell的PID,这和"$$"是不同的,因为每个shell的$BASHPID是独立的。而"$$"有时候会继承父shell的值。
>
> $!:最近一次执行的后台进程PID。
>
> $#:统计参数的个数。
>
> $@:所有单个参数,如"a""b""c""d"。
>
> $*:所有参数的整体,如“abcd”。
>
> $0:脚本名。
>
> $1……$n:参数位置。
示例:
[root@k8s-node2 home]# sh var.sh a b c d
$?:0
$$:21368
$!:
$#:4
$@:a b c d
$*:a b c d
$0:var.sh
$1:a
$2:b
$3:c
$4:d
[root@k8s-node2 home]# sh var.sh
$?:0
$$:21442
$!:
$#:0
$@:
$*:
$0:var.sh
$1:
$2:
$3:
$4:
[root@k8s-node2 home]# cat var.sh
echo '$?:'$?
echo '$$:'$$
echo '$!:'$!
echo '$#:'$#
echo '$@:'$@
echo '$*:'$*
echo '$0:'$0
echo '$1:'$1
echo '$2:'$2
echo '$3:'$3
echo '$4:'$4
1.4.9 变量的切分、提取和替换
其实是对变量实现的功能,只是使用文件名的说法比较典型,且容易理解它的用途。
例如,将文件名"Linux.docx.jpg"存放到变量file_name中,然后执行从左向右或从右向左的删除或贪婪删除。
[root@xuexi tmp]# file_name="Linux.docx.jpg"
[root@xuexi tmp]# file_name_greedy=${file_name%%.*}
[root@xuexi tmp]# file_name_nongreedy=${file_name%.*}
[root@xuexi tmp]# extention_name_greedy=${file_name##*.}
[root@xuexi tmp]# extention_name_nongreedy=${file_name#*.}
[root@xuexi tmp]# echo -e "${file_name_greedy}\n${file_name_nongreedy}\n${extention_name_greedy}\n${extention_name_nongreedy}"
Linux
Linux.docx
jpg
docx.jpg
${var%%.*} 和 ${var%.*} 中的 %%.* 表示从右向左匹配 .* 并删除,由于Linux.docx.jpg有两种符合条件的匹配:".jpg"和".docx.jpg",所以使用两个"%%"表示贪婪删除,即删除最长匹配".docx.jpg"。可以使用一个%表示非贪婪删除,表示删除最短的匹配即".jpg"。
${var##*.} 和 ${var#*.} 中的 ##*. 表示从左向右匹配 *. 并执行贪婪删除,即删除"Linux.docx.",同理 #*. 表示非贪婪删除,即删除"Linux."。
除了删除,还可以实现提取和替换的功能。
[root@xuexi tmp]# echo "${file_name:0:5}" # 提取第0个字节后的5个字节,即1-5字节
Linux
[root@xuexi tmp]# echo "${file_name:6:4}" # 提取第6个字节后的4个字节,即第7、8、9、10字节
docx
[root@xuexi tmp]# echo "${file_name/jpg/pdf}" # 非贪婪替换jpg为pdf,即只替换从左向右的第一个
Linux.docx.pdf
[root@xuexi tmp]# echo "${file_name//jpg/pdf}" # 贪婪替换jpg为pdf,即所有的jpg都替换为pdf
Linux.docx.pdf
bash环境配置文件主要有/etc/profile、~/.bash_profile、~/.bashrc、/etc/bashrc和/etc/profile.d/*.sh
![](https://img.haomeiwen.com/i7100414/ab2e779e475c067c.png)
网友评论