a b
이름에 공백이 포함된 세 개의 파일( , c d
및 )이 포함된 디렉토리가 있다고 가정해 보겠습니다 e f
. vi
처음 두 파일을 편집하는 데 사용하고 싶습니다 . 내가 원하는 bash 명령은
vi "a b" "c d"
또한 첫 번째 명령의 매개 변수를 바꿀 수 있도록 :을 ls
사용하여 명령의 처음 두 줄을 가져오고 싶습니다 .head
ls | head -n 2
그러나 실행하면 vi $(ls | head -n 2)
, 내부 출력이 공백과 줄 바꿈으로 분할되기 vi a b c d
때문에 내가 원하는 것이 아닙니다 . $()
줄 바꿈만으로 출력을 분할하는 방법이 있습니까?
답변1
줄 바꿈만으로 출력을 분할하는 방법이 있습니까?
예, IFS
하나의 줄 바꿈으로 설정합니다(기본적으로 공백, 탭 및 줄 바꿈이 포함됩니다).
IFS=$'\n'
vi $(ls | head -n 2)
( $''
비표준이지만 Bash/ksh/zsh에서 작동하며 다른 대안보다 더 아름답습니다.)
즉, 파일 이름에 전역 문자가 포함될 수 있다는 문제가 여전히 남아 있습니다. 와일드카드를 비활성화하려면 set -f
먼저 사용한 다음 set +f
다시 활성화 해야 합니다 . 또한 파일 이름에 개행 문자가 포함되어 있으면 작동하지 않지만 여러분도 알고 있을 것입니다.