在变量中存储通配符并回显在该变量

时间:2016-11-01 00:16:31

标签: bash

嗯......如果不清楚,我可能要编辑它......

我希望能够将“* .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

EDIT1

我想我可能需要将外卡保留在双引号之外

$ f2=".php"
$ echo "$f"
*.php
$ echo "$f2"
.php
$ echo *"$f2"
2G_3G_Overview_Dashboard_week.php 2G_3G_sgsn_attach_pdp_day.php

1 个答案:

答案 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