쉘 변수에서 공백을 제거하는 방법은 무엇입니까?

쉘 변수에서 공백을 제거하는 방법은 무엇입니까?

명령줄에서 다음을 수행했습니다.

$ text="name with space"
$ echo $text
name with space

tr -d ' '다음 결과를 사용하여 공백을 제거 하려고합니다 .

namewithspace

나는 다음과 같은 몇 가지를 시도했습니다.

text=echo $text | tr -d ' '

지금까지는 운이 좋지 않았으므로 여러분이 도움을 줄 수 있기를 바랍니다!

답변1

Bash에서는 Bash에 내장된 문자열 조작을 사용할 수 있습니다. 이 경우 다음을 수행할 수 있습니다.

> text="some text with spaces"
> echo "${text// /}"
sometextwithspaces

문자열 조작 연산자에 대한 자세한 내용은 다음을 참조하세요.http://tldp.org/LDP/abs/html/string-manipulation.html

그러나 원래 전략도 작동하지만 구문이 약간 다릅니다.

> text2=$(echo $text | tr -d ' ')
> echo $text2
sometextwithspaces

답변2

echo명령이 전혀 필요하지 않습니다. 그냥 사용하십시오.여기 문자열대신에:

text=$(tr -d ' ' <<< "$text")

호기심에 다양한 도구를 사용하여 이런 사소한 작업을 완료하는 데 걸리는 시간을 확인했습니다. 가장 느린 것부터 가장 빠른 것 순으로 정렬된 결과는 다음과 같습니다.

abc="some text with spaces"

$ time (for i in {1..1000}; do def=$(echo $abc | tr -d ' '); done)
0.76s user 1.85s system 52% cpu 4.976 total

$ time (for i in {1..1000}; do def=$(awk 'gsub(" ","")' <<< $abc); done)
1.09s user 2.69s system 88% cpu 4.255 total

$ time (for i in {1..1000}; do def=$(awk '$1=$1' OFS="" <<< $abc); done)
1.02s user 1.75s system 69% cpu 3.968 total

$ time (for i in {1..1000}; do def=$(sed 's/ //g' <<< $abc); done)
0.85s user 1.95s system 76% cpu 3.678 total

$ time (for i in {1..1000}; do def=$(tr -d ' ' <<< $abc); done)
0.73s user 2.04s system 85% cpu 3.244 total

$ time (for i in {1..1000}; do def=${abc// /}; done)
0.03s user 0.00s system 59% cpu 0.046 total

순수 셸 작업이 확실히 가장 빠른 것은 놀라운 일이 아니지만, 정말 인상적인 점은 가장 느린 명령보다 100배 이상 빠르다는 것입니다!

답변3

다음과 같이 텍스트 변수를 수정하십시오.

text=$(echo $text | tr -d ' ')

그러나 제어 문자가 있으면 깨질 수 있습니다. 따라서 Kasperd가 제안한 대로 주위에 큰따옴표를 넣을 수 있습니다. 그래서,

text="$(echo "$text" | tr -d ' ')"

더 나은 버전이 될 것입니다.

답변4

숫자가 포함된 변수가 필요한 특별한 경우:

쉿:

typeset -i A=B #or
typeset -i A="   23232"

크쉬:

typeset -n A=B #or
typeset -n A="   23232"

관련 정보