变量前面的“#”运算符在变量扩展中起什么作用?

变量前面的“#”运算符在变量扩展中起什么作用?

下面是我在终端中执行的代码

[root@idm ~]# x="$(date +%d%m%y)"    
[root@idm ~]# echo $x
270217
[root@idm ~]# echo ${#x}
6

有人可以帮助我理解为什么输出是这样6吗?#本质上对变量做了什么?

答案1

它是一个参数扩展,返回参数的长度、数组中元素的数量或位置参数的数量。

请阅读您的 shell 手册。以下内容摘自bash手册:

${#parameter}

的值的字符长度parameter被替换。如果parameter*@,则替换的值是位置参数的数量。如果 parameter是数组名,下标为*@,则替换的值是数组中元素的数量。如果 parameter是索引数组名称,下标为负数,则该数字被解释为相对于比参数最大索引大的 1,因此负索引从数组末尾开始倒数,索引 -1 引用最后一个元素。


并且,不要养成在交互式 root shell 中工作的习惯。这充其量是危险和鲁莽的。请sudo谨慎使用,并且仅在需要提升权限的情况下使用。bash作为一个普通的非 root 用户,你绝对可以尝试一下。

在过去的几年中,我只使用交互式 root shell 为自己手动添加单个用户。这是一个 2 分钟的工作,然后我绝不需要#再次在那台机器上看到提示。

答案2

#运算符返回变量的长度。在你的情况下,可变x长度是六。

请看一下参数替换了解更多信息。

相关内容