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

Gir*_*ara 13 shell

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

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

有人能帮我理解为什么输出6吗?什么是#主要做给变量?

Kus*_*nda 29

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

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

${#parameter}

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


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

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

  • @蒂莫是吗?我假设您正在评论我答案的最后部分?当然,某些操作需要 root 权限,这很常见。我的意思是,以 root 身份登录并使用交互式 root shell 是_极其_危险且不必要的。只需在此网站上[搜索“意外”一词](https://unix.stackexchange.com/search?q=accidentally)。您可以使用“sudo vi /etc/ssh/sshd_conf”从非 root 帐户以 root 身份编辑“sshd_config”,而不是首先启动交互式 shell。 (2认同)

小智 14

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

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