有人可以解释下面的shell脚本会做什么吗?
END_POS=$((${#column}-$COLON_INDEX))
答案 0 :(得分:3)
在此上下文中,它代表该变量值的长度:
$ v="hello"
$ echo ${#v}
5
$ v="bye"
$ echo ${#v}
3
那么这个命令是什么?
END_POS=$((${#column}-$COLON_INDEX))
它获取$column
中值的长度,并使用$COLON_INDEX
语法减去$(( ))
中的值以执行算术运算:
$ column="hello"
$ colon_index=2
$ r=$((${#column}-$colon_index)) # len("hello") - 2 = 5 - 2
$ echo $r
3
(())没有领先的$不是标准的sh功能。它来了 来自ksh,仅适用于ksh,Bash和zsh。 $(()) POSIX shell中允许替换。正如人们所预料的那样 $(())中的算术表达式的结果被替换 进入原始命令。喜欢参数替换,算术 替换受到分词的影响所以应该引用 在列表上下文中阻止它。
答案 1 :(得分:1)
我能想到的#
的所有可能用途:
它代表变量的值或元素的长度:
我已经回显了变量的值长度,数组长度和数组的第一个索引元素的长度:
$ var="abcd"
$ echo "${#var}"
4
$ arr=('abcd' 'efg')
$ echo "${#arr[@]}"
2
$ echo "${#arr[1]}"
3
$
此外,$#
为您提供传递给脚本/函数的参数数量。