⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array-strops.sh

📁 BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版
💻 SH
字号:
#!/bin/bash# array-strops.sh: 用于数组的字符串操作. # 本脚本由Michael Zick所编写. # 授权使用在本书中. #  一般来说, 任何类似于${name ... }(这种形式)的字符串操作#+ 都能够应用于数组中的所有字符串元素, #+ 比如说${name[@] ... }或${name[*] ...}这两种形式. arrayZ=( one two three four five five )echo# 提取尾部的子串echo ${arrayZ[@]:0}     # one two three four five five                        # 所有元素. echo ${arrayZ[@]:1}     # two three four five five                        # element[0]后边的所有元素. echo ${arrayZ[@]:1:2}   # two three                        # 只提取element[0]后边的两个元素. echo "-----------------------"#  子串删除#  从字符串的开头删除最短的匹配, #+ 匹配的子串也可以是正则表达式. echo ${arrayZ[@]#f*r}   # one two three five five                        # 匹配将应用于数组的所有元素.                         # 匹配到了"four", 并且将它删除. # 从字符串的开头删除最长的匹配echo ${arrayZ[@]##t*e}  # one two four five five                        # 匹配将应用于数组的所有元素.                         # 匹配到了"three", 并且将它删除. # 从字符串的结尾删除最短的匹配echo ${arrayZ[@]%h*e}   # one two t four five five                        # 匹配将应用于数组的所有元素.                         # 匹配到了"hree", 并且将它删除. # 从字符串的结尾删除最长的匹配echo ${arrayZ[@]%%t*e}  # one two four five five                        # 匹配将应用于数组的所有元素.                         # 匹配到了"three", 并且将它删除. echo "-----------------------"# 子串替换# 第一个匹配到的子串将会被替换echo ${arrayZ[@]/fiv/XYZ}   # one two three four XYZe XYZe                            # 匹配将应用于数组的所有元素. # 所有匹配到的子串都会被替换echo ${arrayZ[@]//iv/YY}    # one two three four fYYe fYYe                            # 匹配将应用于数组的所有元素. # 删除所有的匹配子串# 如果没有指定替换字符串的话, 那就意味着'删除'echo ${arrayZ[@]//fi/}      # one two three four ve ve                            # 匹配将应用于数组的所有元素. # 替换字符串前端子串echo ${arrayZ[@]/#fi/XY}    # one two three four XYve XYve                            # 匹配将应用于数组的所有元素. # 替换字符串后端子串echo ${arrayZ[@]/%ve/ZZ}    # one two three four fiZZ fiZZ                            # 匹配将应用于数组的所有元素. echo ${arrayZ[@]/%o/XX}     # one twXX three four five five                            # 为什么? echo "-----------------------"# 在将处理后的结果发送到awk(或者其他的处理工具)之前 --# 回忆一下:#   $( ... )是命令替换. #   函数作为子进程运行. #   函数结果输出到stdout. #   用read来读取函数的stdout. #   使用name[@]表示法指定了一个"for-each"操作. newstr() {    echo -n "!!!"}echo ${arrayZ[@]/%e/$(newstr)}# on!!! two thre!!! four fiv!!! fiv!!!# Q.E.D: 替换动作实际上是一个'赋值'. #  使用"For-Each"形式的echo ${arrayZ[@]//*/$(newstr optional_arguments)}#  现在, 如果Bash只将匹配到的子串作为$0#+ 传递给将被调用的函数 . . .echoexit 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -