다음 중괄호 확장(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"