Shell字符串操作
sh
for folder in "${folders[@]}"
do
# 去掉文件夹名后面的"/"
folder=${folder%*/}
# 检查该文件夹是否在关联数组中
if [[ -n "${map[$folder]}" ]]; then
cd "$folder"
# 检查该文件夹是否为git项目,
if [ -d .git ]; then
echo "Building $folder"
git pull origin "${map[$folder]}"
fi
cd ..
fi
done
for folder in "${folders[@]}"
do
# 去掉文件夹名后面的"/"
folder=${folder%*/}
# 检查该文件夹是否在关联数组中
if [[ -n "${map[$folder]}" ]]; then
cd "$folder"
# 检查该文件夹是否为git项目,
if [ -d .git ]; then
echo "Building $folder"
git pull origin "${map[$folder]}"
fi
cd ..
fi
done
有这么一段语法,其中
python
folder=${folder%*/}
folder=${folder%*/}
用于去掉最后的/,这属于shell中的字符串操作语法。用于删除字符串中指定的字符。具体来说,${folder%*/}
表示从字符串folder字符串末尾没有/字符,则不进行任何操作。
常用的字符串操作
1. 字符串长度
sh
${#string}
${#string}
2. 提取子字符串
sh
${string:position}
${string:position:length}
${string:position}
${string:position:length}
3. 删除子字符串
sh
${string#substring}
${string##substring}
${string%substring}
${string%%substring}
${string#substring}
${string##substring}
${string%substring}
${string%%substring}
4. 替换子字符串
sh
1. ${string/substring/replacement} # 该方式只能替换出现的第一个字符串
2. ${string//substring/replacement} # 该方式可以替换文本中所有的字符串(全局替换)
1. ${string/substring/replacement} # 该方式只能替换出现的第一个字符串
2. ${string//substring/replacement} # 该方式可以替换文本中所有的字符串(全局替换)
5. 字符串大小写转换
sh
${string^}
${string^^}
${string,}
${string,,}
${string^}
${string^^}
${string,}
${string,,}
6. 字符串比较
sh
[[ string1 == string2 ]]
[[ string1 != string2 ]]
[[ string1 < string2 ]]
[[ string1 > string2 ]]
[[ -z string ]]
[[ -n string ]]
[[ string1 == string2 ]]
[[ string1 != string2 ]]
[[ string1 < string2 ]]
[[ string1 > string2 ]]
[[ -z string ]]
[[ -n string ]]
7. 字符串是否包含子字符串
sh
[[ string == *substring* ]]
[[ string =~ regex ]]
[[ string == *substring* ]]
[[ string =~ regex ]]
8. 字符串是否以子字符串开头或结尾
sh
[[ string == substring* ]]
[[ string == *substring ]]
[[ string == substring ]]
[[ string == *substring* ]]
[[ string == substring* ]]
[[ string == *substring ]]
[[ string == substring ]]
[[ string == *substring* ]]
9. 字符串是否为空
sh
[[ -z string ]]
[[ -n string ]]
[[ -z string ]]
[[ -n string ]]
10. 数组长度
sh
${#array[@]}
${#array[@]}
11. 提取数组元素
sh
${array[@]:position}
${array[@]:position:length}
${array[@]:position}
${array[@]:position:length}
12. 删除数组元素
sh
${array[@]:0:position}
${array[@]:position+1}
${array[@]:0:position}
${array[@]:position+1}
13. 替换数组元素
sh
${array[@]/substring/replacement}
${array[@]//substring/replacement}
${array[@]/substring/replacement}
${array[@]//substring/replacement}
14. 数组合并
sh
${array1[@]} ${array2[@]}
${array1[@]} ${array2[@]}
15. 数组比较
sh
[[ ${array1[@]} == ${array2[@]} ]]
[[ ${array1[@]} != ${array2[@]} ]]
[[ ${array1[@]} == ${array2[@]} ]]
[[ ${array1[@]} != ${array2[@]} ]]
16. 数组是否包含元素
sh
[[ ${array[@]} =~ $substring ]]
[[ ${array[@]} =~ $substring ]]
17. 数组是否为空
sh
[[ -z ${array[@]} ]]
[[ -n ${array[@]} ]]
[[ -z ${array[@]} ]]
[[ -n ${array[@]} ]]
使用sed也可以进行字符替换
用户
shell如何把字符串str使用replace,比如把里面的"替换为空字符串,且把里面的,替换为文字逗号
助手
在shell中,可以使用sed命令来实现字符串替换。具体命令如下:
echo $str | sed 's/\"//g; s/,/文字逗号/g'
echo $str | sed 's/\"//g; s/,/文字逗号/g'
其中,s表示替换操作,/"/表示要替换的字符串是双引号,//表示替换成空字符串,g表示全局替换。同理,/,/表示要替换的字符串是逗号,/文字逗号/表示要替换成的字符串是“文字逗号”。
示例:
str="这是一个\"字符串\",包含逗号,需要替换"
echo $str | sed 's/\"//g; s/,/文字逗号/g'
str="这是一个\"字符串\",包含逗号,需要替换"
echo $str | sed 's/\"//g; s/,/文字逗号/g'
输出结果:
这是一个字符串文字逗号包含逗号文字逗号需要替换
这是一个字符串文字逗号包含逗号文字逗号需要替换
注意:如果要在shell脚本中使用这个命令,需要将双引号转义,即将"改为\"。
用户
我需要把上面的结果赋值给一个变量,而不是输出到屏幕上。
助手
可以使用命令替换的方式将sed命令的输出结果赋值给一个变量,具体命令如下:
new_str=$(echo $str | sed 's/\"//g; s/,/文字逗号/g')
new_str=$(echo $str | sed 's/\"//g; s/,/文字逗号/g')
其中,$(...)表示命令替换,即将括号中的命令执行后的输出结果赋值给变量new_str。
示例:
str="这是一个\"字符串\",包含逗号,需要替换"
new_str=$(echo $str | sed 's/\"//g; s/,/文字逗号/g')
echo $new_str
str="这是一个\"字符串\",包含逗号,需要替换"
new_str=$(echo $str | sed 's/\"//g; s/,/文字逗号/g')
echo $new_str
输出结果:
这是一个字符串文字逗号包含逗号文字逗号需要替换
这是一个字符串文字逗号包含逗号文字逗号需要替换
注意:在shell脚本中使用命令替换时,需要将改为$.