Lun*_*ist 3 shell bash variable
假设我以 root 身份连接到 Linux 系统。
当我输入时到底发生了什么unset *?
ber*_*sch 13
我将假设您的 shell 是 Bash,尽管以下内容也应适用于大多数 Bourne/POSIX 类的 shell。
简而言之,该命令没有意义。
shell 将首先用*当前目录中所有文件和目录的名称替换星号,但那些以点开头的文件和目录除外.。然后它将调用该unset列表上的命令。
目的unset是删除shell变量,而不是处理文件。如果文件或目录名恰好对应于当前定义的 shell 变量,则该变量将被删除。与 shell 变量不对应的名称要么根本不起作用,要么如果它们包含对 shell 变量来说非法的字符,它们将生成一条错误消息,如not a valid identifier.
实际上,该unset命令要复杂一些;例如,变量可以被标记为只读,在这种情况下它们不能被取消设置。它也适用于函数,而不仅仅是变量。但是,这不会改变命令在正常情况下没有意义的摘要。
此外,正如 Stéphane Chazelas 所评论的,像所有采用变量名称的内置函数一样,unset具有潜在危险的副作用,主要是数据看起来像数组索引。例如,如果文件HOME[$(some command)]存在,unset *将在尝试评估数组索引时运行命令替换。请参阅:在壳牌算术评估中使用未净化数据的安全影响
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |