加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 为什么带有不带引号的变量的glob会扩展到所有文件?

发布时间:2020-12-15 21:36:28 所属栏目:安全 来源:网络整理
导读:我有这个简短的片段: #!/usr/bin/env bashtouch a_b c_d e_fp=aprintf '%sn' "Not quoted" ./$p_*printf '%sn' "" "Quoted" ./"$p"_* 输出: Not quoted./a_b./c_d./e_fQuoted./a_b 我很清楚分词和不引用变量的危险但我不明白为什么第一个glob,带有无引号
我有这个简短的片段:

#!/usr/bin/env bash

touch a_b c_d e_f

p=a

printf '%sn' "Not quoted" ./$p_*
printf '%sn' "" "Quoted" ./"$p"_*

输出:

Not quoted
./a_b
./c_d
./e_f

Quoted
./a_b

我很清楚分词和不引用变量的危险但我不明白为什么第一个glob,带有无引号变量$p,扩展到所有文件.

解决方法

_是bash中变量名的有效部分.所以你的未引用的实际上正在扩展$p_,这是一个空变量.这使得你的printf行看起来像:

printf '%sn' "Not quoted" ./*

并且*会扩展到您期望的所有文件.

如果在变量名称周围放置可选括号,您将获得预期的行为:

printf '%sn' "Not quoted" ./${p}_*

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读