包含文件通配符的Bash变量

时间:2012-01-29 13:44:38

标签: bash shell

我有一个包含野蛮文件描述符的变量:

FORMATS='*.mobi *.pdf *.txt *.epub *.lit'

如果我写

,它会使用适当的文件进行扩展
echo $FORMATS

并保留其字符串值,如果我引用它

echo "$FORMATS"

现在,我需要将其作为一个字符串进行操作,我这样做。

SUBST=`echo "$FORMATS" | sed "s/$1//"`

问题在于``文件内部无论如何都要扩展。怎么预防这个?感谢。

3 个答案:

答案 0 :(得分:3)

不,它没有扩大!

你可能正在做的是使用SUBST没有引号(例如:echo $SUBST),然后它会被扩展...使用"$SUBST"

答案 1 :(得分:1)

这可能对您有用:

cd /tmp/formats
touch a.mobi b.pdf c.txt e.epub f.lit
a='*.mobi *.pdf *.txt *.epub *.lit'
echo "$a"
*.mobi *.pdf *.txt *.epub *.lit
echo $a  
a.mobi b.pdf c.txt e.epub f.lit
b=pdf
c=$(echo "${a/\*.$b}")
echo "$c"
*.mobi  *.txt *.epub *.lit
echo $c  
a.mobi c.txt e.epub f.lit

答案 2 :(得分:0)

没有看到更多的代码我只能猜测你可能想做这样的事情:

:这只是shell - 不需要其他工具

for FILE in *.mobi *.pdf *.txt *.epub *.lit ; do
    case "$FILE" in
        "*.mobi"|"*.pdf"|"*.txt"|"*.epub"|"*.lit")continue;;
        *)echo "${FILE//$1/}";;
    esac
done

大概你会把文件mv或cp改为新的文件名???