我有一个 file ~/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)