선행 및 후행 공백이 있는 tablename이라는 변수가 있습니다(예:
tablename= yyy
). 선행 및 후행 공백을 제거하고 싶습니다(출력:
tablename=yyy
) 그리고 쉘 스크립트를 사용하여 공백을 남기지 않고 이 변수를 파일에 씁니다.
답변1
var=' A B C '
그리고 zsh
:
trim=${${var%${var##*[^[:blank:]]}}#${${var%${var##*[^[:blank:]]}}%%[^[:blank:]]*}}
printf '++%s++\n' $trim
++AB C++
그리고 bash
:
shopt -s extglob
trim=${var%%*([[:blank:]])}
trim=${trim##*([[:blank:]])}
printf '++%s++\n' "$trim"
++AB C++
모든 셸에 대해 추가 변수를 사용하여 선행 및 후행 공백을 보유할 수 있습니다1 ( 기본적으로 동일한 솔루션이지만 zsh
중첩되지 않음):
trail=${var##*[^[:blank:]]} # get trailing space
var=${var%${trail}} # remove trailing space
lead=${var%%[^[:blank:]]*} # get leading space
trim=${var#${lead}} # remove leading space
printf '++%s++\n' "$trim"
++AB C++
1: 명확하게 하기 위해 여기서는 두 개의 변수를 사용하여 선행 공백과 후행 공백을 별도로 유지하지만 하나의 변수가 가능합니다.
답변2
주어진대로다른 사이트의 게시물:
tablename=${tablename// }
답변3
이 read
명령은 선행 및 후행 공백 문자를 다듬습니다( 값으로 정의됨 IFS
). 공백을 다듬기 위해 여기 문서와 함께 사용할 수 있습니다.
IFS=' ' read tablename <<EOF
$tablename
EOF
bash(X 쉘 브랜드 아님)를 사용하는 경우 여기에 있는 문서 대신 여기에 있는 문자열을 사용하여 이를 단순화할 수 있습니다.
IFS=' ' read tablename <<<"$tablename"
이 할당은 $IFS
명령의 접두사 이므로 read
해당 명령에만 적용되며 나중에 재설정할 필요가 없습니다. 또한, 혼란스럽지 않고 $IFS
탭과 공백을 잘라내고 싶다면 IFS
전혀 설정할 필요가 없습니다.
답변4
echo "tablename =yyy" | tr -d ' '
tablename=yyy