我希望能够将“* .php”存储在变量中,然后当我对该变量名称进行回显时,我希望输出与ls *.php
这就是我想要的,我实现了我想要的,但我不认为这是最佳实践echo $f
没有双引号
$ echo $f
2G_3G_Overview_Dashboard_week.php 2G_3G_sgsn_attach_pdp_day.php
但如果我用双引号做echo "$f"
,我得到以下内容,即变量“* .php”的值,而不是与* .php匹配的文件列表
$ echo "$f"
*.php
所以基本上我可以使用echo $f
得到我想要的东西,但这不是好习惯,因为它没有双引号。有人能指出我正确的方向。
这是我的命令日志:
$ echo *.php
$ echo *.php
2G_3G_Overview_Dashboard_week.php 2G_3G_sgsn_attach_pdp_day.php
$
$
$ ls *.php
2G_3G_Overview_Dashboard_week.php 2G_3G_sgsn_attach_pdp_day.php
$
$
$ f=*.php
$ echo "$f"
*.php
$
$ echo $f
2G_3G_Overview_Dashboard_week.php 2G_3G_sgsn_attach_pdp_day.php
我想我可能需要将外卡保留在双引号之外
$ f2=".php"
$ echo "$f"
*.php
$ echo "$f2"
.php
$ echo *"$f2"
2G_3G_Overview_Dashboard_week.php 2G_3G_sgsn_attach_pdp_day.php
答案 0 :(得分:1)
你应该注意,当你用“”包围变量时,如果该变量的内容包含*
bash将不会展开它。如果您想要扩展文件名,则不应引用$f
变量。但它适用于for循环
# this works
f="*.php"
for i in $f;do
echo $i
done
# this does not work
for i in "$f";do
echo "$i"
done
# this works
for i in "$f";do
echo $i # reads all files ones
done