vim $(cat filelist)
以前提案されたようにvimでファイルを開こうとしました質問。
次のようなファイルがあるとします。
~/Workspace/bar/foo.cpp
vim $(cat filelist)
から実行すると、が含まれている場合は~/Workspace
正しく開きます。ただし、が含まれている場合、コマンドはファイルを開きません。絶対パスを使用するとコマンドが失敗する理由を知りたいです。foo.cpp
filelist
bar/foo.cpp
filelist
~/Workspace/bar/foo.cpp
答え1
これは、シェル内でさまざまな種類の展開が実行される順序によるものです。manbash
ページには次のように書かれています。
展開は、コマンド ラインが単語に分割された後に実行されます。実行される展開には、中括弧展開、チルダ展開、パラメーターと変数の展開、コマンド置換、算術展開、単語分割、パス名展開の 7 種類があります。
をチルダ展開に置き換えます~
が、 は$(...)
コマンド置換です。コマンド置換が実行されると、チルダ置換がなくなることがわかります。実際の絶対パス (ファイル システムのルートから始まる/
) では機能します。
ただし、次の方法で自分で拡張を実行することもできますsed
。
vim $(sed "s_~_${HOME}_g" filelist)