通配符不被replace

#!/bin/bash loc=`echo ~/.gvfs/*/DCIM/100_FUJI` rm -f /mnt/fujifilmA100 ln -s "$loc" /mnt/fujifilmA100 

出于某种原因,variables*不会被replace为唯一可能的值,并获得值/home/chris/.gvfs/*/DCIM/100_FUJI。 有没有人有一个为什么的想法?

请注意:

  • 如果全球扩张失败,这个模式不会被取代。 我跑的命令:

    chris @ comp2008:〜$ loc =“echo〜/ .gvfs / * / DCIM / 100_FUJI

    chris @ comp2008:〜$ echo $ loc

    /home/chris/.gvfs/gphoto2在USB上挂载%3A001,008 / DCIM / 100_FUJI

    所以我们可以看到扩展应该工作

  • 我现在已经转向使用:

    loc =“find〜/ .gvfs -name 100_FUJI

    我只是好奇,为什么它不工作。

  • 使用sh -xdebugging输出

echo /home/chris/.gvfs/*/DCIM/100_FUJI

LOC = /家庭/克里斯/ .gvfs / * / DCIM / 100_FUJI

rm -f / mnt / fujifilmA100

ln -s /home/chris/.gvfs/*/DCIM/100_FUJI/mnt/fujifilmA100

你在回应Tactical Vim时提到,你正在sudo下运行 – ' ~ '会在sudo和普通用户下扩展。 将其更改为“ ~chris ”或硬编码您的主目录。

你确定你input的.sh文件完全如图所示吗? 我只是做了一个testing脚本做和你一样的事情,它适用于我。

也许是用空格,%-signs和逗号与奇怪的目录名称?

尝试在'sh -x'下运行脚本来查看一些debugging输出,也许它会提供一个线索。 我从来没有见过这种方式使用回声,这可能是相关的东西; 如果你用'ls -d'(或类似的,不确定你的输出)replace'echo',它是否工作?

好的,我修改了我的脚本,如下所示:

 loc=`echo ~chris/.gvfs/*/DCIM/` sudo rm -f /mnt/camera sudo ln -s "$loc" /mnt/camera 

注意sudo在脚本里面