~/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)