shell字符串操作(一)——字符串变量

本文详细介绍Shell脚本中字符串变量的定义、属性、运算及高级操作方法,包括变量定义与赋值方式、字符串长度获取、字符串比较、字符串拼接、切片操作等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、字符串变量定义与赋值

符号意义:

  • :空测试    =>空为真
  • -  负向测试 =>不存在为真
  • + 正向测试 =>存在为真
  • = 赋值
  • ?有问题,错误
表达式含义示例

var=string

var='string'

var="string"

直接定义并赋值

string单引号包起来:原样输出

string双引号包起来:特殊符号和变量解析

var=hello,world!          =>hello,world!

var=hello,world!\n       =>错误
var='hello,world!\n'      =>hello,world!\n

var="hello,world!\n"     =>hello,world!(换行)

var=$(cmd)
var=`cmd`
定义并取得命令返回值var=$(whereis ls)
var=`whereis ls`(旧式写法)
$var
${var}
变量var的值echo $var
echo "hello,${var}"
${var-string}如果var没有被声明, 那么就以string作为其值
(var不被赋值)

echo ${var1-$var}   =>hello,world!

echo ${var1-'aaa'}   =>aaa

${var:-string}

如果var没有被声明或其值为空, 那么就以string作为其值

(var不被赋值)

var1=''

echo ${var1:-$var}   =>hello,world!

echo ${var1:-'aaa'}   =>aaa

${var:=string}如果var没有被声明或其值为空, 那么就以string赋值给var

echo ${var:='abs'}   =>abs

echo ${var}              =>abs

${var:?string}如果var没有被声明或其值为空, 那么以string作提示并终止脚本

${var2:?'不能为空'}        =>var:不能为空

${var:+string}如果var没有被声明或其值为空, 则返回空,反之则返回string

echo ${var:?'不为空'}        =>不能空

echo ${var2:+'不为空'}      =>

 

二、字符串变量属性

#字符串长度 ${#var}
var="hello,world!"
echo ${#var}         # 12

三、字符串运算

运算符含义

示例

a="hello"

b="hello,world!"

=检测两个字符串是否相等,相等返回 true。[ $a = $b ]   =>false
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ]  =>true
-z检测字符串长度是否为0,为0返回 true。[ -z $a ]       =>false
-n检测字符串长度是否为0,不为0返回 true。[ -n $a ]       =>true
str检测字符串是否为空,不为空返回 true。[ $a ]           =>true
=~检测字符串是否包含(正则试算),包含返回为true[ $b =~ $a ]  =>true
[[ $test =~ ^[0-9]+ ]] && echo 1 || echo 0

四、字符串拼接

#直接放到一起或用双引号即可,示例:
a=hello
b=world
c=$a$b       # $c = helloworld
c=$a" "$b    # $c = hello world
c="$a $b!"   # $c = hello world!

五、字符串切片

表达式含义

示例

var="hello,world!"

${var:n}取第n个字符后面的字符串echo ${var:3}        =>lo,world
${var:n:m}取第n个字符后面开始的m个字符echo ${var:3:5}     =>lo,wo
${var: -n}从末尾开始取n个字符,注意:与-之间的空格echo ${var: -3}      =>rld

${var:m:-n}

从第m个字符至从末尾的第n个字符

echo ${var:3:-3}     =>lo,wo

${var: -n:m}从末尾开始取n个字符,取m个字符echo ${var: -6:3}     =>,wo
${var: -n: -m}从倒数第n个取到倒数第m个echo ${var: -6: -1}     =>,worl
${var%.*}(非贪婪)
${var%%.*}(贪婪)

删除VALUE字符串中以分隔符“.”匹配的右边字符,保留左边字符

“*”表示通配符,用于匹配字符串将被删除的字串(下同)

${var%,*}   =>hello
${var#*.}(非贪婪)
${var##*.}(贪婪)
删除VALUE字符串中以分隔符“.”匹配的左边字符,保留右边字符${var#*.}    =>world!
${var/OLD/NEW}(非贪婪)
${var//OLD/NEW}(贪婪)
用NEW子串替换VALUE字符串中匹配的OLD子串。${var/world/Keven}  =>hello,Keven!

 

在实现 MUI 底部选项卡的跳转功能时,可以使用 `<BottomNavigation>` 和 `<BottomNavigationAction>` 组件来创建底部导航栏和选项卡。 首先,你需要导入相关的组件: ```jsx import React, { useState } from 'react'; import { BottomNavigation, BottomNavigationAction } from '@mui/material'; import { Home, Explore, Favorite } from '@mui/icons-material'; ``` 然后,你可以创建一个函数组件,并在组件中添加底部导航栏和选项卡的代码: ```jsx function BottomTabs() { const [value, setValue] = useState(0); // 用于保存当前选中的选项卡索引 const handleTabChange = (event, newValue) => { setValue(newValue); // 更新选中的选项卡索引 }; return ( <BottomNavigation value={value} onChange={handleTabChange}> <BottomNavigationAction label="Home" icon={<Home />} /> <BottomNavigationAction label="Explore" icon={<Explore />} /> <BottomNavigationAction label="Favorite" icon={<Favorite />} /> </BottomNavigation> ); } ``` 在上面的代码中,我们使用 `useState` 钩子来创建一个名为 `value` 的状态变量,用于保存当前选中的选项卡索引。`handleTabChange` 函数用于处理选项卡变动事件,并更新 `value` 的值。 最后,将 `BottomTabs` 组件添加到你的页面中即可: ```jsx function App() { return ( <div> {/* 其他内容 */} <BottomTabs /> </div> ); } ``` 这样,你就实现了 MUI 底部选项卡的跳转功能。当用户点击不同的选项卡时,会触发 `handleTabChange` 函数,并更新 `value` 的值,从而实现页面的跳转效果。你可以根据自己的需求,在每个选项卡的 `onClick` 事件中添加相应的跳转逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值