공백을 구분자로 사용하는 문자열이 있다고 가정합니다.
newline_separated=${space_separated// /$'\n'}
그러나 아마도 잘못된 질문을하고있을 것입니다. 공백으로 구분 된 파일 이름 목록이 실제로 작동하지 않습니다. 파일 이름 중 하나에 공백이 있으면 어떻게됩니까?
프로그램이 파일 이름을 인수로 받으면 공백으로 조인하지 마십시오. "$@"
하나씩 액세스하는 데 사용하십시오 . echo "$@"
사이에 공백이있는 인수를 인쇄 하지만 그 이유 echo
는 공백으로 구분 기호로 인수를 인쇄합니다. somecommand "$@"
파일 이름을 별도의 인수로 명령에 전달합니다. 인수를 별도의 줄에 인쇄하려면 다음을 사용할 수 있습니다.
printf '%s\n' "$@"
공백으로 구분 된 파일 이름이 있고이를 처리하기 위해 배열에 넣으려는 경우 인용되지 않은 변수 확장을 사용하여 문자의 값을 분할 할 수 있습니다 IFS
( set -f
그렇지 않은 경우에는 glob 패턴은 값에서 확장됩니다) :
space_separated_list='/path/to/file1 /path/to/file2 /path/to/file3'
IFS=' '; set -f
eval "array=(\$space_separated_list)"
for x in "${array[@]}"; do …
-f
설정과 IFS
완료 시점 의 값 을 복원하는 함수로 이것을 캡슐화 할 수 있습니다 .
split_list () {
local IFS=' ' flags='+f'
if [[ $- = *f* ]]; then flags=; fi
set -f
eval "$1=($2)"
set $flags
}
split_list array '/path/to/file1 /path/to/file2 /path/to/file3'
for x in "${array[@]}"; do …