インラインコマンドにファイル名があることを確認してください。

インラインコマンドにファイル名があることを確認してください。

次の内容を含むinput.txtというファイルがあります。

...
ファイル "Edie - Realities.txt" TXT
...

私はそれを読み、FILEで始まる行からファイル名パスを削除し、それが存在することを確認したいと思います。

[ -f $(cat input.txt | grep FILE | grep -o "\".*\"") ] && echo "exist" || echo "does not exist"

ただし、これは次のように出力されます。

[: too many arguments  
does not exist

私が実行した場合:

echo $(cat input.txt | grep FILE | grep -o "\".*\"")

私は私が期待したものを得ます:

"Edie - Realities.txt"

それでは、なぜこれが起こり、どのように解決できますか?

ベストアンサー1

引数を引用する必要があります-f。実行すると、set -x実行中のコマンドに[ -f '"Edie' '-' 'Realities.txt"' ]引数が多すぎることがわかります。

[ -f "$(sed -e '/FILE/!d' -e 's/FILE "\([^"]*\).*/\1/' input.txt)" ]

システムにGNU grepがある場合は、次のものを使用できます。

[ -f "$(grep -Po '(?<=FILE ").*(?=")' input.txt)" ] 

おすすめ記事