1、利用shell 中 变量 的字符串替换
1)将字符串安逗号切分并且组成一个新数组
#!/bin/bash
string=“hello,shell,split,test”
array=(${string//,/ })
for var in ${array[@]}
do
echo $var
done
2) 将字符串安位数切分成一个新的串
#!/bin/bash
string="hello,shell,split,test"
#array=(${string//,/ })
array=${string:3:6}
echo $array
方法二: 设置分隔符,通过 IFS 变量
Shell 的环境变量分为 set, env 两种,其中 set 变量可以通过 export 工具导入到 env 变量中。其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。换句话说,set 变量里包含了 env 变量,但 set 变量不一定都是 env 变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。
而 IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。
操作逻辑:先把 IFS 赋值一个新的值(要按照切分的字符串) 然后回复成默认值
例子如下
#!/bin/bash
string=“hello,shell,split,test”
#对IFS变量 进行替换处理
OLD_IFS="$IFS"
IFS=","
array=($string)
IFS="$OLD_IFS"
for var in ${array[@]}
do
echo $var
done
3、 利用tr 指令实现字符替换
原理
由于只是对单个字符进行的替换,则可以用 echo args | tr “oldSpilt” “newSpilt” 的方式实现。
tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。
语法
tr(选项)(参数)
选项
-c或——complerment:取代所有不属于第一字符集的字符;
-d或——delete:删除所有属于第一字符集的字符;
-s或–squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t或–truncate-set1:先删除第一字符集较第二字符集多出的字符。
参数
字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”;
字符集2:指定要转换成的目标字符集。
#!/bin/bash
string="hello,shell,split,test"
array=(`echo $string | tr ',' ' '` )
for var in ${array[@]}
do
echo $var
done