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


12

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

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

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

Answers:


25

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

请阅读您的外壳手册。以下是bash手册中的内容:

${#parameter}

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


而且,不要养成在交互式root shell中工作的习惯。充其量是危险和鲁re的。sudo仅在需要提升特权的情况下谨慎使用。bash作为普通的非root用户,可以肯定地玩弄。

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


13

#操作者返回一个可变的长度。在您的情况下,可变x长度为六。

请查看参数替换以获取更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.