Kako smanjiti razmake iz bash varijable?

Imam skriptu skripte s ovim kodom:

 var=`hg st -R "$path"` if [ -n "$var" ]; then echo $var fi 

No, uvjetni kod se uvijek izvršava, jer hg st uvijek ispisuje barem jedan znak novog znaka.

  • Postoji li jednostavan način za uklanjanje razmaka iz $var (na primjer, trim() u PHP-u )?

ili

  • Postoji li standardni način rješavanja ovog problema?

Mogao bih koristiti sed ili awk , ali bih volio misliti da postoji elegantnije rješenje za ovaj problem.

701
16 дек. tražio previše php 16 dec. 2008-12-16 00:24 '08 u 0:24 2008-12-16 00:24
@ 42 odgovora
  • 1
  • 2

Nažalost, problem je negdje drugdje u mojoj skripti, i mislio sam da var ima konačnu novu liniju u njoj, ali zapravo nije. Naredba za zamjenu automatski dovršava nove retke, kao što je ovdje navedeno: http://tldp.org/LDP/abs/html/commandsub.html .

10
04 дек. odgovor je dan previše php 04 dec. 2017-12-04 20:17 '17 u 20:17 2017-12-04 20:17

Definirajte varijablu koja sadrži vodeće, završne i međuprostore:

 FOO=' test test test ' echo -e "FOO='${FOO}'" # > FOO=' test test test ' echo -e "length(FOO)==${#FOO}" # > length(FOO)==16 

Kako ukloniti sve razmake (označeno s [:space:] in tr ):

 FOO=' test test test ' FOO_NO_WHITESPACE="$(echo -e "${FOO}" | tr -d '[:space:]')" echo -e "FOO_NO_WHITESPACE='${FOO_NO_WHITESPACE}'" # > FOO_NO_WHITESPACE='testtesttest' echo -e "length(FOO_NO_WHITESPACE)==${#FOO_NO_WHITESPACE}" # > length(FOO_NO_WHITESPACE)==12 

Kako ukloniti samo vodeće prostore:

 FOO=' test test test ' FOO_NO_LEAD_SPACE="$(echo -e "${FOO}" | sed -e 's/^[[:space:]]*//')" echo -e "FOO_NO_LEAD_SPACE='${FOO_NO_LEAD_SPACE}'" # > FOO_NO_LEAD_SPACE='test test test ' echo -e "length(FOO_NO_LEAD_SPACE)==${#FOO_NO_LEAD_SPACE}" # > length(FOO_NO_LEAD_SPACE)==15 
border=0

Kako ukloniti samo završni prostor:

 FOO=' test test test ' FOO_NO_TRAIL_SPACE="$(echo -e "${FOO}" | sed -e 's/[[:space:]]*$//')" echo -e "FOO_NO_TRAIL_SPACE='${FOO_NO_TRAIL_SPACE}'" # > FOO_NO_TRAIL_SPACE=' test test test' echo -e "length(FOO_NO_TRAIL_SPACE)==${#FOO_NO_TRAIL_SPACE}" # > length(FOO_NO_TRAIL_SPACE)==15 

Kako ukloniti vodeći i završni prostor - lanac sed :

 FOO=' test test test ' FOO_NO_EXTERNAL_SPACE="$(echo -e "${FOO}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" echo -e "FOO_NO_EXTERNAL_SPACE='${FOO_NO_EXTERNAL_SPACE}'" # > FOO_NO_EXTERNAL_SPACE='test test test' echo -e "length(FOO_NO_EXTERNAL_SPACE)==${#FOO_NO_EXTERNAL_SPACE}" # > length(FOO_NO_EXTERNAL_SPACE)==14 

Alternativno, ako ga vaš bash podržava, možete zamijeniti echo -e "${FOO}" | sed ... echo -e "${FOO}" | sed ... na sed ... <<<${FOO} , na primjer (za prateće razmake):

 FOO_NO_TRAIL_SPACE="$(sed -e 's/[[:space:]]*$//' <<<${FOO})" 
854
13 июля '10 в 0:31 2010-07-13 00:31 odgovor je dao MattyV 13. srpnja '10. u 0:31 2010-07-13 00:31

Jednostavan odgovor je:

 echo " lol " | xargs 

Xargs će smanjiti. Ova jedna naredba / program, bez parametara, vraća odrezani niz, upravo ovako!

Napomena: ovo ne uklanja unutarnje prostore, tako da "foo bar" ostaje nepromijenjen. Ne postaje "foobar" .

706
19 окт. odgovor je dao makevoid 19. listopada. 2012-10-19 14:52 '12 u 14:52 2012-10-19 14:52

Postoji rješenje koje koristi samo ugrađene zamjenske znakove Bash:

 var=" abc " # remove leading whitespace characters var="${var#"${var%%[![:space:]]*}"}" # remove trailing whitespace characters var="${var%"${var##*[![:space:]]}"}" echo "===$var===" 

Ovdje je omotan u funkciju:

 trim() { local var="$*" # remove leading whitespace characters var="${var#"${var%%[![:space:]]*}"}" # remove trailing whitespace characters var="${var%"${var##*[![:space:]]}"}" echo -n "$var" } 

Proslijedite niz koji želite obrezati u navodnicima. na primjer:

 trim " abc " 

Dobra stvar kod ovog rješenja je da će raditi s bilo kojom POSIX-kompatibilnom ljuskom.

veza

264
28 июля '10 в 13:37 2010-07-28 13:37 odgovor je dat bashfu 28. srpnja '10 u 13:37 2010-07-28 13:37

Bash ima funkciju nazvanu ekspanzija parametra , koja, između ostalog, dopušta zamjenu nizova temeljenih na takozvanim uzorcima (obrasci nalikuju regularnim izrazima, ali postoje temeljne razlike i ograničenja). [originalni redak flussence: Bash ima regularne izraze, ali dobro su skriveni:]

U nastavku je prikazano kako ukloniti sav bijeli prostor (čak i iznutra) iz vrijednosti varijable.

 $ var='abc def' $ echo "$var" abc def # Note: flussence original expression was "${var/ /}", which only replaced the *first* space char., wherever it appeared. $ echo -n "${var//[[:space:]]/}" abcdef 
65
16 дек. Odgovor daje korisnik42092 16. prosinca. 2008-12-16 00:37 '08 u 0:37 na 2008-12-16 00:37

Uklonite jedan vodeći i jedan prateći prostor

 trim() { local trimmed="$1" # Strip leading space. trimmed="${trimmed## }" # Strip trailing space. trimmed="${trimmed%% }" echo "$trimmed" } 

Na primjer:

 test1="$(trim " one leading")" test2="$(trim "one trailing ")" test3="$(trim " one leading and one trailing ")" echo "'$test1', '$test2', '$test3'" 

izlaz:

 'one leading', 'one trailing', 'one leading and one trailing' 

Uklonite sve vodeće i završne razmake

 trim() { local trimmed="$1" # Strip leading spaces. while [[ $trimmed == ' '* ]]; do trimmed="${trimmed## }" done # Strip trailing spaces. while [[ $trimmed == *' ' ]]; do trimmed="${trimmed%% }" done echo "$trimmed" } 

Na primjer:

 test4="$(trim " two leading")" test5="$(trim "two trailing ")" test6="$(trim " two leading and two trailing ")" echo "'$test4', '$test5', '$test6'" 

izlaz:

 'two leading', 'two trailing', 'two leading and two trailing' 
37
06 нояб. Odgovor je dao Brian Cain 06. studenog. 2009-11-06 00:41 '09 u 0:41 2009-11-06 00:41

Možete odrezati samo echo :

 foo=" qsdqsd qsdqs q qs " # Not trimmed echo \'$foo\' # Trim foo=`echo $foo` # Trimmed echo \'$foo\' 
35
14 марта '13 в 3:05 2013-03-14 03:05 odgovor je dat VAmp 14. ožujka '13 u 3:05 2013-03-14 03:05

Da biste uklonili sve razmake s početka i kraja retka (uključujući znakove na kraju retka):

 echo $variable | xargs echo -n 

Time će se ukloniti i duplicirani prostori:

 echo " this string has a lot of spaces " | xargs echo -n 

Stvara: "ovaj redak ima mnogo razmaka"

32
04 дек. odgovor je dat rkachach 04 dec. 2016-12-04 21:28 '16 u 21:28 2016-12-04 21:28

Iz Bash globalizacijskog vodiča

Koristite extglob u proširenju parametara

  #Turn on extended globbing shopt -s extglob #Trim leading and trailing whitespace from a variable x=${x##+([[:space:]])}; x=${x%%+([[:space:]])} #Turn off extended globbing shopt -u extglob 

Ovdje je ista funkcionalnost zatvorena u funkciji (NAPOMENA: morate priložiti ulazni niz koji je prošao funkciji):

 trim() { # Determine if 'extglob' is currently on. local extglobWasOff=1 shopt extglob >/dev/null  extglobWasOff=0 (( extglobWasOff ))  shopt -s extglob # Turn 'extglob' on, if currently turned off. # Trim leading and trailing whitespace local var=$1 var=${var##+([[:space:]])} var=${var%%+([[:space:]])} (( extglobWasOff ))  shopt -u extglob # If 'extglob' was off before, turn it back off. echo -n "$var" # Output trimmed string. } 

Upotreba:

 string=" abc def ghi "; #need to quote input-string to preserve internal white-space if any trimmed=$(trim "$string"); echo "$trimmed"; 

Ako promijenimo funkciju koja će se izvoditi u podskupini, ne trebamo se brinuti o provjeri trenutne opcije ljuske za extglob, možemo je jednostavno postaviti bez utjecaja na trenutnu ljusku. To uvelike pojednostavljuje funkciju. Također ažuriram pozicijske parametre na mjestu, pa ne trebam ni lokalnu varijablu.

 trim() { shopt -s extglob set -- "${1##+([[:space:]])}" printf "%s" "${1%%+([[:space:]])}" } 

kako slijedi:

 $ s=$'\t\n \r\tfoo ' $ shopt -u extglob $ shopt extglob extglob off $ printf ">%q<\n" "$s" "$(trim "$s")" >$'\t\n \r\tfoo '< >foo< $ shopt extglob extglob off 
27
20 сент. odgovor od GuruM 20. rujna 2011-09-20 17:13 '11 u 17:13 2011-09-20 17:13

Uz značajke kompatibilnosti koje su omogućene pomoću proširenih predložaka Bash ( shopt -s extglob ), možete to upotrijebiti:

{trimmed##*( )}

ukloniti proizvoljan broj vodećih prostora.

22
10 июня '10 в 17:54 2010-06-10 17:54 odgovor je dao Mooshu 10. lipnja '10 u 17:54 2010-06-10 17:54

Možete ukloniti znakove novog retka pomoću tr :

 var=`hg st -R "$path" | tr -d '\n'` if [ -n $var ]; then echo $var done 
18
16 дек. Odgovor daje Adam Rosenfield 16. prosinca. 2008-12-16 00:42 '08 u 0:42 2008-12-16 00:42
 # Trim whitespace from both ends of specified parameter trim () { read -rd '' $1 <<<"${!1}" } # Unit test for trim() test_trim () { local foo="$1" trim foo test "$foo" = "$2" } test_trim hey hey  test_trim ' hey' hey  test_trim 'ho ' ho  test_trim 'hey ho' 'hey ho'  test_trim ' hey ho ' 'hey ho'  test_trim $'\n\n\t hey\n\t ho \t\n' $'hey\n\t ho'  test_trim $'\n' ''  test_trim '\n' '\n'  echo passed 
17
25 янв. odgovor dano ožiljak 25. sij 2012-01-25 11:27 '12 u 11:27 2012-01-25 11:27

Uvijek sam to radio sa sed

  var=`hg st -R "$path" | sed -e 's/ *$//'` 

Ako postoji elegantnije rješenje, nadam se da će ga netko objaviti.

16
16 дек. Odgovor je dao Paul Tomblin 16. prosinca. 2008-12-16 00:28 '08 u 0:28 2008-12-16 00:28

Postoji mnogo odgovora, ali još uvijek mislim da je moja pisana skripta vrijedna spomena jer:

  • uspješno je testiran u školjkama bash / dash / busybox
  • on je vrlo mali
  • ne ovisi o vanjskim naredbama i ne treba vilicu (-> brzo i nisko)
  • radi prema očekivanjima:
    • uklanja sve razmake i kartice od početka i kraja, ali ne više
    • Važno: ne uklanja ništa od sredine linije (mnogi drugi odgovori), čak će i nove linije ostati
    • special: "$*" kombinira višestruke argumente pomoću jednog razmaka. ako želite izrezati i prikazati samo prvi argument, umjesto toga koristite "$1"
    • Ako nemate problema s podudaranjem uzoraka naziva datoteke, itd.

skripta:

 trim() { local s2 s="$*" # note: the brackets in each of the following two lines contain one space # and one tab until s2="${s#[ ]}"; [ "$s2" = "$s" ]; do s="$s2"; done until s2="${s%[ ]}"; [ "$s2" = "$s" ]; do s="$s2"; done echo "$s" } 

Upotreba:

 mystring=" here is something " mystring=$(trim "$mystring") echo ">$mystring<" 

zaključak:

 >here is something< 
10
21 окт. Odgovor dao je Daniel Alder 21. listopada 2015-10-21 02:32 '15 u 2:32 2015-10-21 02:32

Možete koristiti staru školu tr . Na primjer, vraća broj izmijenjenih datoteka u git repozitoriju, izbrisane razmake.

 MYVAR=`git ls-files -m|wc -l|tr -d ' '` 
10
27 нояб. odgovor je dan pojo 27 Nov. 2009-11-27 12:49 '09 u 12:49 2009-11-27 12:49

To mi je pomoglo:

 text=" trim my edges " trimmed=$text trimmed=${trimmed##+( )} #Remove longest matching series of spaces from the front trimmed=${trimmed%%+( )} #Remove longest matching series of spaces from the back echo "<$trimmed>" #Adding angle braces just to make it easier to confirm that all spaces are removed #Result <trim my edges> 

Da biste to stavili na manje redaka za isti rezultat:

 text=" trim my edges " trimmed=${${text##+( )}%%+( )} 
8
11 сент. Odgovor dao gMale 11. rujna 2014-09-11 22:55 '14 u 22:55 2014-09-11 22:55
 var=' abc ' trimmed=$(echo $var) 
7
01 апр. odgovor je dan prije 1. travnja 2013-04-01 14:26 '13 u 14:26 2013-04-01 14:26

Vidio sam da skripte koriste zadatke varijabli za obavljanje posla:

 $ xyz=`echo -e 'foo \n bar'` $ echo $xyz foo bar 

Prostor je automatski spojen i izrezan. Morate biti oprezni s meta-znakovima ljuske (potencijalni rizik od injekcija).

Također bih preporučio da uvijek zamjenjujete dvostruke navodnike s varijabilnim ljuskama:

 if [ -n "$var" ]; then 

jer nešto poput -o ili neki drugi sadržaj u varijabli može promijeniti argumente testa.

7
16 дек. Odgovor daje MykennaC 16. prosinca. 2008-12-16 00:57 '08 u 0:57 2008-12-16 00:57
 # Strip leading and trailing white space (new line inclusive). trim(){ [[ "$1" =~ [^[:space:]](.*[^[:space:]])? ]] printf "%s" "$BASH_REMATCH" } 

Ili isto

 # Strip leading white space (new line inclusive). ltrim(){ [[ "$1" =~ [^[:space:]].* ]] printf "%s" "$BASH_REMATCH" } # Strip trailing white space (new line inclusive). rtrim(){ [[ "$1" =~ .*[^[:space:]] ]] printf "%s" "$BASH_REMATCH" } # Strip leading and trailing white space (new line inclusive). trim(){ printf "%s" "$(rtrim "$(ltrim "$1")")" } 

Ili isto

 # Strip leading and trailing specified characters. ex: str=$(trim "$str" $'\n a') trim(){ if [ "$2" ]; then trim_chrs="$2" else trim_chrs="[:space:]" fi [[ "$1" =~ ^["$trim_chrs"]*(.*[^"$trim_chrs"])["$trim_chrs"]*$ ]] printf "%s" "${BASH_REMATCH[1]}" } 

Ili isto

 # Strip leading specified characters. ex: str=$(ltrim "$str" $'\n a') ltrim(){ if [ "$2" ]; then trim_chrs="$2" else trim_chrs="[:space:]" fi [[ "$1" =~ ^["$trim_chrs"]*(.*[^"$trim_chrs"]) ]] printf "%s" "${BASH_REMATCH[1]}" } # Strip trailing specified characters. ex: str=$(rtrim "$str" $'\n a') rtrim(){ if [ "$2" ]; then trim_chrs="$2" else trim_chrs="[:space:]" fi [[ "$1" =~ ^(.*[^"$trim_chrs"])["$trim_chrs"]*$ ]] printf "%s" "${BASH_REMATCH[1]}" } # Strip leading and trailing specified characters. ex: str=$(trim "$str" $'\n a') trim(){ printf "%s" "$(rtrim "$(ltrim "$1" "$2")" "$2")" } 

Ili isto

Temeljeno na izrazu duše ...

 # Strip leading and trailing white space (new line inclusive). trim(){ printf "%s" "'expr "$1" : "^[[:space:]]*\(.*[^[:space:]]\)[[:space:]]*$"'" } 

Ili isto

 # Strip leading white space (new line inclusive). ltrim(){ printf "%s" "'expr "$1" : "^[[:space:]]*\(.*[^[:space:]]\)"'" } # Strip trailing white space (new line inclusive). rtrim(){ printf "%s" "'expr "$1" : "^\(.*[^[:space:]]\)[[:space:]]*$"'" } # Strip leading and trailing white space (new line inclusive). trim(){ printf "%s" "$(rtrim "$(ltrim "$1")")" } 
6
01 мая '17 в 23:09 2017-05-01 23:09 odgovor je dan NOYB 01 May '17 u 23:09 2017-05-01 23:09

Samo bih koristio sed:

 function trim { echo "$1" | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}' } 

a) Primjer uporabe u jednom retku retka

 string=' wordA wordB wordC wordD ' trimmed=$( trim "$string" ) echo "GIVEN STRING: |$string|" echo "TRIMMED STRING: |$trimmed|" 

zaključak:

 GIVEN STRING: | wordA wordB wordC wordD | TRIMMED STRING: |wordA wordB wordC wordD| 

b) Primjer uporabe u višekanalnom nizu

 string=' wordA >wordB< wordC ' trimmed=$( trim "$string" ) echo -e "GIVEN STRING: |$string|\n" echo "TRIMMED STRING: |$trimmed|" 

zaključak:

 GIVEN STRING: | wordAA >wordB< wordC | TRIMMED STRING: |wordAA >wordB< wordC| 

c) Konačna napomena:
Ako ne želite koristiti tu funkciju, za jedan redak možete jednostavno koristiti naredbu "lakše zapamtiti", na primjer:

 echo "$string" | sed -e 's/^[ \t]*//' | sed -e 's/[ \t]*$//' 

primjer:

 echo " wordA wordB wordC " | sed -e 's/^[ \t]*//' | sed -e 's/[ \t]*$//' 

zaključak:

 wordA wordB wordC 

Korištenje viših nizova u više redaka također će dobro funkcionirati , ali imajte na umu da također uklanja privremeni / vodeći interni višestruki prostor, kako je GuruM zabilježio u komentarima

 string=' wordAA >four spaces before< >one space before< ' echo "$string" | sed -e 's/^[ \t]*//' | sed -e 's/[ \t]*$//' 

zaključak:

 wordAA >four spaces before< >one space before< 

Dakle, ako ne želite pohraniti te prostore, koristite funkciju na početku mog odgovora!

d) OBJAŠNJENJE sintakse sed "pronađi i zamijeni" u višekanalnim linijama koje se koriste unutar funkcije trima:

 sed -n ' # If the first line, copy the pattern to the hold buffer 1h # If not the first line, then append the pattern to the hold buffer 1!H # If the last line then ... $ { # Copy from the hold to the pattern buffer g # Do the search and replace s/^[ \t]*//g s/[ \t]*$//g # print p }' 
6
27 авг. Luca Borrione je odgovorio 27. kolovoza. 2012-08-27 19:52 '12 u 19:52 2012-08-27 19:52

Ovdje je funkcija trim () koja reže i normalizira razmake.

 #!/bin/bash function trim { echo $* } echo "'$(trim " one two three ")'" # 'one two three' 

I još jedna mogućnost koja koristi regularne izraze.

 #!/bin/bash function trim { local trimmed="$@" if [[ "$trimmed" =~ " *([^ ].*[^ ]) *" ]] then trimmed=${BASH_REMATCH[1]} fi echo "$trimmed" } echo "'$(trim " one two three ")'" # 'one two three' 
5
08 июня '11 в 19:32 2011-06-08 19:32 odgovor je dao Nicholas Sushkin 08. '11. u 19:32 2011-06-08 19:32

Zadaci ignoriraju prolazne i završne razmake i kao takvi se mogu koristiti za obrezivanje:

 $ var=`echo ' hello'`; echo $var hello 
4
01 окт. odgovor je dan evanx 01 oct. 2010-10-01 14:25 '10 u 14:25 2010-10-01 14:25

Nema problema s nepoželjnim pomicanjem, a unutarnji bijeli prostor nije modificiran (pretpostavlja se da je $IFS parametar postavljen na zadanu vrijednost, koja je ' \t\n' ).

On čita prvi red novog retka (i ne uključuje ga) ili kraj retka, ovisno što se dogodi prvo, i uklanja bilo koju kombinaciju gornjih i donjih razmaka i znakova. Ako želite spremiti više redaka (i odvojiti vodeće i završne linije novog retka), koristite read -r -d '' var << eof ; Međutim, imajte na umu da će, ako vaš unos sadrži \neof , on biti onemogućen ranije. (Ostali oblici bijelog prostora, odnosno \r , \f i \v , nisu uklonjeni, čak i ako ih dodate u $ IFS.)

 read -r var << eof $var eof 
4
03 нояб. odgovor je dao Gregor 03 Nov. 2011-11-03 01:39 '11 u 1:39 2011-11-03 01:39

Koristite AWK:

 echo $var | awk '{gsub(/^ +| +$/,"")}1' 
4
06 нояб. odgovor je dat ghostdog74 06 Nov. 2009-11-06 02:48 '09 u 2:48 2009-11-06 02:48
 #!/bin/bash function trim { typeset trimVar eval trimVar="\${$1}" read trimVar << EOTtrim $trimVar EOTtrim eval $1=\$trimVar } # Note that the parameter to the function is the NAME of the variable to trim, # not the variable contents. However, the contents are trimmed. # Example of use: while read aLine do trim aline echo "[${aline}]" done < info.txt # File info.txt contents: # ------------------------------ # ok hello there $ # another line here $ #and yet another $ # only at the front$ #$ # Output: #[ok hello there] #[another line here] #[and yet another] #[only at the front] #[] 
3
02 дек. Odgovor je dat Razor5900 02. prosinca. 2011-12-02 05:26 '11 u 5:26 am 2011-12-02 05:26

To je najlakši način koji sam vidio. Koristi samo Bash, to je samo nekoliko redaka, regularni izraz je jednostavan i odgovara svim oblicima razmaka:

 if [[ "$test" =~ ^[[:space:]]*([^[:space:]].*[^[:space:]])[[:space:]]*$ ]] then test=${BASH_REMATCH[1]} fi 

Evo primjera skripte za testiranje pomoću

 test=$(echo -e "\n \t Spaces and tabs and newlines be gone! \t \n ") echo "Let see if this works:" echo echo "----------" echo -e "Testing:${test} :Tested" # Ugh! echo "----------" echo echo "Ugh! Let fix that..." if [[ "$test" =~ ^[[:space:]]*([^[:space:]].*[^[:space:]])[[:space:]]*$ ]] then test=${BASH_REMATCH[1]} fi echo echo "----------" echo -e "Testing:${test}:Tested" # "Testing:Spaces and tabs and newlines be gone!" echo "----------" echo echo "Ah, much better." 
3
28 апр. odgovor je dan blujay 28. travnja 2014-04-28 07:25 '14 u 7:25 2014-04-28 07:25

Time ćete ukloniti sve razmake s vaše linije,

  VAR2="${VAR2//[[:space:]]/}" 

/ zamjenjuje prvu pojavu i // sve pojave razmaka u nizu. Naime, sve bijele prostore zamjenjuju - ništa

3
29 мая '13 в 15:03 2013-05-29 15:03 Odgovor je dao Alpesh Gediya 29. svibnja '13 u 15:03 2013-05-29 15:03

Da biste uklonili razmake i kartice s lijeva na desno, upišite:

cyberciti.biz/tips/delete-leading-spaces-from-front-of-each-word.html 

3
06 июля '12 в 8:46 2012-07-06 08:46 odgovor je dao Steven Penny 6. srpnja 2012. u 8:46 2012-07-06 08:46

Time se smanjuje broj prednjih i krajnjih prostora.

whatever=${whatever%% *}

whatever=${whatever#* }

2
11 окт. odgovor je dan gretelmk2 11. listopada. 2010-10-11 16:17 '10 u 16:17 2010-10-11 16:17

Python ima strip() funkciju koja radi identično s PHP trim() , tako da možemo napraviti mali ugrađeni Python kako bismo napravili razumljiv program za to:

 alias trim='python -c "import sys; sys.stdout.write(sys.stdin.read().strip())"' 

To će smanjiti prolazne i završne razmake (uključujući znakove novog reda).

 $ x=`echo -e "\n\t \n" | trim` $ if [ -z "$x" ]; then echo hi; fi hi 
2
08 авг. odgovor je dao Brownhead 08 aug. 2014-08-08 02:16 '14 u 2:16 u 2014-08-08 02:16
  • 1
  • 2

Ostala pitanja o oznakama ili Postavi pitanje