神奇的Shell变量,让你的命令更简洁高效

目录

变量子串

特殊扩展变量

数组

多行字符串变量

Shell系统变量

变量输出


当涉及到命令行工具和脚本编写时,Shell 变量是一个非常重要的概念。利用 Shell 变量,我们可以轻松地存储和操作数据,使我们的命令更加简洁高效。

本文将介绍一些常用的 Shell 变量操作符,包括字符串操作、数组操作等。这些操作符可以帮助我们快速地截取子字符串、替换文本、遍历数组等操作,让我们的命令更加灵活高效。

变量子串

${var} 返回变量 var 的内容,单独使用时有没有{}一样,混合多个变量和常量时,用{}界定变量名

${#var} 返回变量 var 内容的长度

${var:offset} 从变量 var 中的偏移量 offset 开始截取到字符串结尾的子字符串,offset从0开始

${var:offset:length} 从变量 var 中的偏移量 offset 开始截取长度为 length 的子字符串

${var#*.} 从变量var中删除第一个匹配的点(.)及其左边的所有字符

${var##*.} 从变量 var 中删除最后一个匹配的点(.)及其左边的所有字符

${var%.*} 从变量 var 中删除最后一个匹配的点(.)及其右边的所有字符

${var%%.*} 从变量 var 中删除第一个匹配的点(.)及其右边的所有字符

例:

var=file.txt.tar.gz

${var#*.} 的结果为 "txt.tar.gz"

${var##*.} 的结果为 "gz"

${var%.*} 的结果为 "file.txt.tar"

${var%%.*} 的结果为 "file"

也可以使用其它pattern,例:

var=/home/xxx/aaa/file.txt #xxx为当前用户

${var##*/} 的结果为 "file.txt"

~${var#*$(whoami)} 的结果为 "~/aaa/file.txt",whoami 是获取当前用户名,放在$()中是取该命令的执行结果

${var/pattern/string} 使用string代替第一个匹配的pattern

${var//pattern/string} 使用string代替所有匹配的pattern

${var,} 首字母转小写

${var,,} 全部转小写

${var^} 首字母转大写

${var^^} 全部转大写

特殊扩展变量

${var-word} 如果变量var未赋值,则返回word字符串

${var:-word} 如果变量var未赋值或者值为空,则返回word字符串

${var+word} 如果变量var有值(包括空串""),则返回word字符串

${var:+word} 如果变量var有值且不为空,则返回word字符串

${var=word} 如果变量var未赋值,则返回word字符串,并为var赋值为word字符串

${var:=word} 如果变量var未赋值或者值为空串,则返回word字符串,并为var赋值为word字符串

${var?word} 如果变量var未赋值,将word字符串作为标准错误输出,否则返回变量var的值

${var:?word} 如果变量var未赋值或者值为空串,将word字符串作为标准错误输出,否则返回变量var的值

数组

array=(1 2 3 a b c) 定义一个名为 array 的数组,包含了 6 个元素,元素字段类型不需要统一

${array[index]} 访问数组中的元素,index 从 0 开始,如果为负表示从数组的末尾开始的偏移量

${array[*]} 或者 ${array[@]} 获取数组中所有元素

${#array[*]} 或者 ${#array[@]} 获取数组的长度

${!array[@]} 获取数组索引列表,返回 0 1 2 3 4 5

array+=(4 d) 向数组中添加元素,数组内容为 1 2 3 a b c 4 d

unset array[6] 删除第 7 个元素,数组内容为 1 2 3 a b c d

unset array[-1] 删除倒数第 1 个元素,数组内容为 1 2 3 a b c

多行字符串变量

var=$(cat <<- 'EOF'
多行变量内容
...
EOF
)

或者使用单引号或者双引号(单引号中${}和$()等都不会取表达式的值,双引号中才会):

var='
多行变量内容
...
'

Shell系统变量

$n $1 表示第一个参数,$2 表示第二个参数 ...

$# 命令行参数的个数

$0 当前Shell脚本程序的名称

$? 前一个命令或函数的返回码

$* 以"参数1 参数2 ... " 形式保存所有参数

$@ 以"参数1" "参数2" ... 形式保存所有参数

$$ 本程序的进程ID,即PID

$! 上一个命令的PID

$PPID 父进程的PID

$UID 执行这个脚本的当前用户ID

变量输出

变量内容的输出使用 echo 命令。如果未使用 echo,则会将变量内容当成 Shell 命令来执行,常用于调用某个程序并传递参数。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创意程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值