vim $(cat filelist)
我尝试按照之前的建议使用 vim 打开文件问题。
假设我有以下文件:
~/Workspace/bar/foo.cpp
当包含时正确vim $(cat filelist)
打开执行。但是,当包含时,该命令不会打开文件。我想知道为什么使用绝对路径会导致命令失败。~/Workspace
foo.cpp
filelist
bar/foo.cpp
filelist
~/Workspace/bar/foo.cpp
答案1
这是由于不同类型的扩展在 shell 中执行的顺序造成的。手册bash
页说:
扩展是在命令行上被分割成单词后执行的。执行了七种扩展:大括号扩展、波形符扩展、参数和变量扩展、命令替换、算术扩展、分词和路径名扩展。
替换~
is 波形符扩展,同时$(...)
替换 is 命令。现在您可以看到,执行命令替换后,不再有波浪号替换。使用真正的绝对路径(从文件系统 root 开始/
)它可以工作。
但您可以通过以下方式自行执行扩展sed
:
vim $(sed "s_~_${HOME}_g" filelist)