在bash中展开存储在变量中的文件路径模式

时间:2015-06-30 15:46:59

标签: bash

我将以下值存储在变量模式

$WS/*.asd

在我的环境中,$ WS计算到有效目录(/ home / administrator / dev / workspaces /)。此目录中有一些.asd文件。我想将pattern变量扩展到此目录中所有匹配的.asd文件。但是,我尝试了以下命令,但它们都不起作用:

expand "$pattern"
expand: $WS/*.asd: No such file or directory

ls $pattern
ls: cannot access $WS/*.asd: No such file or directory

eval $pattern
/home/administrator/dev/workspaces/a.asd: Permission denied

echo $pattern
$WS/*.asd

我将模式作为输入。我知道如何将模式扩展到包含所有匹配文件的列表。

编辑:更详细地解释问题

我可以按任何顺序获得env-vars和通配符的任意组合。例如,输入可以是:/home/$USER/*/$DIR/*.my_extension。问题是我想评估所有的环境并扩展通配符。

2 个答案:

答案 0 :(得分:3)

eval以外,您可以尝试find

pattern='$WS/*.asd'

find "$WS" -name "${pattern##*/}"

编辑:根据您编辑的问题,您似乎必须使用:

eval echo "$pattern"

答案 1 :(得分:1)

您可以将该模式后面的所有元素存储在数组中:

#!/bin/bash
arr=()
shopt -s nullglob # expand the glob pattern to a null sting if no elements caught
arr+=($WS/*.asd)
shopt -u nullglob # undo the 'shopt -s nullglob'

打印条目:

for entry in "${arr[@]}"; do
    echo "$entry"
done