我将以下值存储在变量模式
中$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
。问题是我想评估所有的环境并扩展通配符。
答案 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