'#'是什么意思?在shell脚本中的变量之前?

时间:2016-05-02 11:06:03

标签: shell

有人可以解释下面的shell脚本会做什么吗?

END_POS=$((${#column}-$COLON_INDEX))

2 个答案:

答案 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

来自Arithmetic expression

  

(())没有领先的$不是标准的sh功能。它来了   来自ksh,仅适用于ksh,Bash和zsh。 $(())   POSIX shell中允许替换。正如人们所预料的那样   $(())中的算术表达式的结果被替换   进入原始命令。喜欢参数替换,算术   替换受到分词的影响所以应该引用   在列表上下文中阻止它。

答案 1 :(得分:1)

我能想到的#的所有可能用途:

它代表变量的值或元素的长度:

我已经回显了变量的值长度,数组长度和数组的第一个索引元素的长度:

$ var="abcd"
$ echo "${#var}"
4
$ arr=('abcd' 'efg')
$ echo "${#arr[@]}"
2
$ echo "${#arr[1]}"
3
$

此外,$#为您提供传递给脚本/函数的参数数量。