我已经知道我们可以对shell中的变量进行几项操作,例如:
1)“#”& “##”操作
使用$ {var#pattern},我们删除$ {var}头部的“pattern”。可以在模式中使用“*”来匹配所有内容。 “#”和“##”之间的区别在于,“##”将删除最长匹配子字符串,而“#”删除最短匹配子字符串。例如,
var=brbread
${var##*br} // ead
${var#*br} // bread
2)“%”& “%%”操作
使用$ {var%pattern},我们删除$ {var}末尾的“pattern”。当然,“%%”表示最长匹配,而“%”表示最短。例如,
var=eadbreadbread
${var%%*br} // eadbreadbread
${var%%br*} // ead
${var%br*} // eadbread
3)“/”操作
使用$ {var / haha / heihei},我们将$ var中的“haha”替换为“heihei”。例如,
var=ihahai
${var/haha/heihei/} / iheiheii
我只是好奇或不知道我们可以对除上述变量以外的变量进行更多操作吗?
感谢。
答案 0 :(得分:4)
是的,对bash的变量进行了很多其他操作,例如大小写修改,数组键列表,名称扩展等。
您应该查看Parameter Expansion章节中的手册页。
答案 1 :(得分:3)
在您的一个示例中,您可以使用两个斜杠进行全局替换:
${var//ha/hei/} # the result would be the same
(请注意,在Bash中,注释字符为“#”。)
以下是参数扩展变量操作的一些示例:
提供默认值:
$ unset foo
$ bar="hello"
$ echo ${foo:-$bar} # if $foo had a value, it would be output
hello
替代值:
$ echo ${bar:+"goodbye"}
goodbye
$ echo ${foo:+"goodbye"} # no substitution
子串:
$ echo ${bar:1:2}
el
$ echo ${bar: -4:2} # from the end (note the space before the minus)
el
数组键列表:
$ array=(123 456)
$ array[12]=7890
$ echo ${!array[@]}
0 1 12
参数长度:
$ echo ${#bar}
5
$ echo ${#array[@]} # number of elements in an array
3
$ echo ${#array[12]} # length of an array element
4
修改案例(Bash 4):
$ greeting="hello jim"
$ echo ${greeting^}
Hello jim
$ echo ${greeting^^}
HELLO JIM
$ greeting=($greeting)
$ echo ${greeting[@]^}
Hello Jim