w Ubuntu skrypcie bash jak usunąć przestrzeń z jednej zmiennejJak usunąć spację ze sznurka?
ciąg będzie
3918912k
chcesz usunąć wszystkie puste miejsca.
w Ubuntu skrypcie bash jak usunąć przestrzeń z jednej zmiennejJak usunąć spację ze sznurka?
ciąg będzie
3918912k
chcesz usunąć wszystkie puste miejsca.
Spróbuj zrobić to w powłoce:
s=" 3918912k"
echo ${s//[[:blank:]]/}
który wykorzystuje parameter expansion
[[:blank:]]
jest klasą POSIX regex (usuń spacje, tabulatory ...), patrz http://www.regular-expressions.info/posixbrackets.html
Zmiana parametrów ekspansji wewnątrz nie POSIX. Będzie działać w Bashu (i może innych powłokach, których nie znam), ale nie w Dash na przykład. – MoonSweep
Można również użyj echo
, aby usunąć spacje na początku lub końcu łańcucha, ale także powtarzając spacje wewnątrz łańcucha.
$ myVar=" kokor iiij ook "
$ echo "$myVar"
kokor iiij ook
$ myVar=`echo $myVar`
$
$ # myVar is not set to "kokor iiij ook"
$ echo "$myVar"
kokor iiij ook
To nie jest niezawodne: jeśli 'myVar' zawiera specjalne znaki takie jak' * ', powłoka rozszerzy go o pliki z bieżącego katalogu. –
Jako # bash na freenode zawsze mówi ...użyj więcej cytatów. 'echo" $ myvar "' zapobiega ekspansji globów, itp. – bobpaul
@bobpaul, zapobiega rozszerzaniu się globów, itp., ale zawiera także wiodące i końcowe białe znaki, których Mickaël zamierzał się pozbyć :( –
zabawny sposób, aby usunąć wszystkie spacje ze zmiennej jest użycie printf:
$ myvar='a cool variable with lots of spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit
Okazuje się, że to nieco bardziej wydajny niż myvar="${myvar// /}"
, ale nie jest bezpieczne dotyczące globs (*
), które mogą pojawić się w ciągu znaków. Więc nie używaj go w kodzie produkcyjnym.
Jeśli naprawdę naprawdę chcesz użyć tej metody i są naprawdę martwi się o rzeczy globowania (i naprawdę powinno), można użyć set -f
(który wyłącza globbing łącznie):
$ ls
file1 file2
$ myvar=' a cool variable with spaces and oh! no! there is a glob * in it'
$ echo "$myvar"
a cool variable with spaces and oh! no! there is a glob * in it
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglobfile1file2init
$ # See the trouble? Let's fix it with set -f:
$ set -f
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglob*init
$ # Since we like globbing, we unset the f option:
$ set +f
Zamieściłem ten odpowiedz tylko dlatego, że jest zabawnie, nie używać go w praktyce.
Jednak w tym przypadku cytaty są wyraźnie pominięte, aby usunąć wiodące białe znaki, więc globalne znaki są w grze –
Skondensowane do bezpiecznej jednej linii: 'myvar =" $ (set -f; printf "% s" $ myvar) "; echo" [$ myvar] " –
Ponieważ używasz bash, najszybszym sposobem byłoby:
shopt -s extglob # Allow extended globbing
var=" lakdjsf lkadsjf "
echo "${var//+([[:space:]])/}"
To najszybsza, ponieważ korzysta z wbudowanych funkcji zamiast rozpalania dodatkowych procesów.
Jeśli jednak chcesz to zrobić w taki sposób, POSIX zgodny użyć sed
:
var=" lakdjsf lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
W nieinteraktywnej powłoce (tj. skrypcie), musisz najpierw" shopt-s extglob " –
@glennjackman Dobry chwyt Zobacz moje aktualizacje –
Narzędzia sed
lub tr
zrobi to za ciebie przez zamianę spacje za nic
sed 's/ //g'
tr -d ' '
przykład:
$ echo " 3918912k " | sed 's/ //g'
3918912k
http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable – cnicutar