~/filelist
各行にスペースを含めることができるファイルのパス名であるファイルがあります。
/path/to/my file1
/another path/to/my file2
ファイル名を引数として受け入れるスクリプトがあります。
myscript.sh "/path/to/my file1" "/another path/to/my file2"
ただし、次のコマンドは機能しません
myscript.sh $(cat ~/filelist)
そして
arr=($(cat ~/filelist))
myscript.sh "${arr[@]}"
スクリプトをどのように機能させることができますか~/filelist
?ありがとうございます。
答え1
一般的な単語分割の理由は次のとおりです。
Bashの特定のケースでは、mapfile
トークン化に直接触れる必要がないため、提供された配列を使用するのが最もきれいです。
$ mapfile -t paths < filelist
$ myscript.sh "${paths[@]}"
あるいは、必要に応じて噴射を直接使用してもよい。
$ set -o noglob # disable globbing, same as 'set -f'
$ IFS=$'\n' # split only on newlines
$ myscript $(cat filelist)