답변1
tab-width.sh
다음과 같은 스크립트를 사용할 수 있습니다 .
#!/usr/bin/env bash
echo -ne 'a\tb' &&
echo -ne "\033[6n" # ask the terminal for the position
read -rs -d\[ _ # discard the first part of the response
read -rs -dR foo # store the position in bash variable 'foo'
foo=$(cut -d";" -f2 <<< "$foo") # discard row number
printf "\r\e[0K%d\n" $((foo - 2)) # subtract 2 for 'a' and 'b'
에서 적응StackOverflow에 대한 답변입니다.. 예:
$ tabs 10
$ ./tab-width.sh
10
$ tabs 20
$ ./tab-width.sh
20
$ tabs 3
$ ./tab-width.sh
3
이 스크립트는 철저하게 테스트되지 않았으므로 주의하시기 바랍니다. 1과 2는 동일한 값을 반환하지만 대부분의 경우 잘 작동하는 것 같습니다.
$ tabs 1
$ ./tab-width.sh
2
$ tabs 2
$ ./tab-width.sh
2
echo -e 'a\tb'
그러나 두 경우 모두 반환된 출력도 동일하다는 점에 유의해야 합니다 .
답변2
편집하다:다음은 실제로 내가 생각한 대로 작동하지 않습니다. 댓글에서 이 점을 지적해 주신 @4wk_에게 감사드립니다 :)
나는 사용해왔다
echo $'\t' | wc -L
# typical output:
8
이 목적을 위해.
echo $'\t'
= 단일 탭 문자를 인쇄합니다.wc
="단어 카운터" 프로그램-L
= 일명--max-line-length
;wc
스위치에 선의 길이를 계산하라고 지시합니다.탭이 올바르게 확장됩니다.
나는 이 접근 방식이 다른 TTY와 셸 간에 매우 이식성이 높다는 것을 알았습니다. 이식성을 향상시키기 위해 추가할 유일한 것은 에코를 다음과 같이 변경하는 것입니다.
echo -e "\t"
그런데 정말 토마토 토마토네요.