버팀대 확장 시 원하지 않는 공간

버팀대 확장 시 원하지 않는 공간

다음 중괄호 확장(bash 쉘)이 있습니다.

echo -e {0..4..2}" "{0..2..2}"\n"

나는 이것이 생산될 것이라고 예상했다

0 0
0 2
2 0
2 2
4 0
4 2

그러나 첫 번째 줄을 제외한 출력의 모든 줄에는 선행 공백이 있고 끝에 추가 빈 줄이 있는데, 이는 예상하지 못했습니다. 왜 이런거야? 쉽게 고칠 수 있는 방법이 있나요? 분명히 파이프로 연결하는 것과 같은 투박한 작업을 수행할 수 있지만 sed 's/^ //'추가 명령으로 파이프할 필요가 없는 더 멋진 방법이 있습니까?

답변1

echo줄바꿈을 포함하거나 생성하는 경우에도 공백으로 구분된 인수를 인쇄합니다. 또한 출력 끝에 개행 문자를 추가합니다( 가 아닌 경우 echo -n).

사용 printf:

printf '%s\n' {0..4..2}" "{0..2..2}

예상치 못한 일이 생기면 echo항상고려하다printf. 일단 익숙해지면 printf첫 번째 선택이 될 수도 있습니다.

답변2

공백이 생기는 이유는 각 줄의 시작 부분이 복잡하기 때문입니다. 이 echo명령은 공백으로 구분된 인수를 출력합니다. 각 매개변수는 확장과 개행 문자로 {0..4..2}구성 됩니다. {0..2..2}이 두 개를 합치면 각 줄의 시작 부분에 있는 공백이 실제로 echo항목 사이에서 방출되는 공백임을 알 수 있습니다.

나는 몇 가지 해결책을 생각했습니다. 첫 번째는 출력 시작 부분에 빈 줄이 있어도 괜찮다면 각 확장 시작 부분에 개행 문자를 넣을 수 있다는 것입니다.

echo -e "\n"{0..4..2}" "{0..2..2}

또 다른 방법은 매개변수를 반복하여 개별적으로 인쇄하는 것입니다.

for seq in {0..4..2}" "{0..2..2}; do echo "$seq"; done

또는

echo -e {0..4..2}"\n"{0..2..2} | xargs printf "%d %d\n"

관련 정보