Bash 명령 대체에서 개행 문자를 사용하여 분할

Bash 명령 대체에서 개행 문자를 사용하여 분할

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다시 활성화 해야 합니다 . 또한 파일 이름에 개행 문자가 포함되어 있으면 작동하지 않지만 여러분도 알고 있을 것입니다.

관련 정보