我有这个简短的片段:
#!/usr/bin/env bash
touch a_b c_d e_f
p=a
printf '%s\n' "Not quoted" ./$p_*
printf '%s\n' "" "Quoted" ./"$p"_*
Run Code Online (Sandbox Code Playgroud)
输出:
Not quoted
./a_b
./c_d
./e_f
Quoted
./a_b
Run Code Online (Sandbox Code Playgroud)
我很清楚分词和不引用变量的危险但我不明白为什么第一个带有未引用变量的glob $p扩展到所有文件.
_是bash中变量名的有效部分.所以你的未引用的实际上正在扩展$p_,这是一个空变量.这使你的printf行看起来像:
printf '%s\n' "Not quoted" ./*
Run Code Online (Sandbox Code Playgroud)
并*按照您的预期扩展到所有文件.
如果在变量名称周围放置可选括号,您将获得预期的行为:
printf '%s\n' "Not quoted" ./${p}_*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |