ファイルリストを使用してvimでファイルを開くことができない

ファイルリストを使用してvimでファイルを開くことができない

vim $(cat filelist)以前提案されたようにvimでファイルを開こうとしました質問

次のようなファイルがあるとします。

~/Workspace/bar/foo.cpp

vim $(cat filelist)から実行すると、が含まれている場合は~/Workspace正しく開きます。ただし、が含まれている場合、コマンドはファイルを開きません。絶対パスを使用するとコマンドが失敗する理由を知りたいです。foo.cppfilelistbar/foo.cppfilelist~/Workspace/bar/foo.cpp

答え1

これは、シェル内でさまざまな種類の展開が実行される順序によるものです。manbashページには次のように書かれています。

展開は、コマンド ラインが単語に分割された後に実行されます。実行される展開には、中括弧展開、チルダ展開、パラメーターと変数の展開、コマンド置換、算術展開、単語分割、パス名展開の 7 種類があります。

をチルダ展開に置き換えます~が、 は$(...)コマンド置換です。コマンド置換が実行されると、チルダ置換がなくなることがわかります。実際の絶対パス (ファイル システムのルートから始まる/) では機能します。

ただし、次の方法で自分で拡張を実行することもできますsed

vim $(sed "s_~_${HOME}_g" filelist)

関連情報