Shell 脚本中的字符串操作
字符串操作被定义为对字符串执行若干操作,从而导致其内容发生变化。在 Shell Scripting 中,这可以通过两种方式完成:纯 bash字符串操作和通过外部命令的字符串操作。
纯 bash字符串操作的基础:
1.为变量赋值并打印其内容:在bash中,' $ '后跟变量名用于打印变量的内容。 Shell 在内部使用其值扩展变量。 shell 的这个特性也被称为参数扩展。 Shell 不关心变量的类型,可以存储字符串、整数或实数。
句法:
VariableName='value'
echo $VariableName
or
VariableName="value"
echo ${VariableName}
or
VariableName=value
echo "$VariableName"
注意:变量赋值中的“ = ”符号周围不应有任何空格。当您使用VariableName=value 时,shell 将“ = ”视为赋值运算符并将值分配给变量。当您使用VariableName = value 时,shell 假定VariableName是命令的名称并尝试执行它。
例子:
2. 要在 Bash Shell 中打印字符串的长度: ' # ' 符号用于打印字符串的长度。
句法:
variableName=value
echo ${#variablename}
例子:
3. 在 Bash Shell 中使用变量连接字符串:在 bash 中,将字符串一起列出来连接字符串。如此形成的结果字符串是一个包含所有列出的字符串的新字符串。
句法:
var=${var1}${var2}${var3}
or
var=$var1$var2$var3
or
var="$var1""$var2""$var3"
连接字符串之间的任何字符:
The following will insert "**" between the strings
var=${var1}**${var2}**${var3}
or
var=$var1**$var2**$var3
or
var="$var1"**"$var2"**"$var3"
The following concatenate the strings using space:
var=${var1} ${var2} ${var3}
or
var="$var1" "$var2" "$var3"
or
echo ${var1} ${var2} ${var3}
注意:通过空格连接字符串,避免使用var=$var1 $var2 $var3 。在这里,shell 将$var2和$var3假定为命令并尝试执行它们,从而导致错误。
例子:
4. 在 Bash Shell 中使用数组连接字符串:在 bash 中,数组也可用于连接字符串。
句法:
To create an array:
arr=("value1" value2 $value3)
To print an array:
echo ${arr[@]}
To print length of an array:
echo ${#arr[@]}
Using indices (index starts from 0):
echo ${arr[index]}
Note: echo ${arr} is the same as echo ${arr[0]}
例子:
5. 从字符串提取子串:在 Bash 中,可以从字符串提取字符的子串。
句法:
${string:position} --> returns a substring starting from $position till end
${string:position:length} --> returns a substring of $length characters starting from $position.
注意: $length和$position必须始终大于或等于零。
如果$position小于 0,它将打印完整的字符串。
如果 $ length小于 0,则会引发错误并且不会执行。
例子:
6.子串匹配:在Bash中,可以从前面或后面找到和删除子串的最短和最长匹配项。
句法:
To delete the shortest substring match from front of $string:
${string#substring}
To delete the shortest substring match from back of $string:
${string%substring}
To delete the longest substring match from front of $string:
${string##substring}
To delete the shortest substring match from back of $string of $string:
${string%%substring}
例子:
在上面的例子中:
- 第一个echo语句子串' *。 “匹配以点结束字符,#删除从字符串前面的子串最短的匹配,所以它去除的子”欢迎。 '。
- 第二个echo语句子“*”的子字符串开始点与结束字符匹配,并且%删除从字符串后面的字符串的最短匹配,所以它去除的子“.GeeksForGeeks”
- 第三个echo语句子串' *。 “匹配以点结束字符,##删除从字符串前面的子串的最长匹配,所以它去除的子” Welcome.to。 '
- 第四echo语句子“*”的子字符串开始点与结束字符匹配,和%%删除从字符串后面的字符串的最长匹配,所以它去除的子“.to.GeeksForGeeks”。