Skip to content

商务合作:vTikTok


公众号:



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脚本中使用命令替换时,需要将改为$.

参考