Przykład.
Łańcuchy i wyrażenia nawiasowe
Długość łańcucha
$ cat len.sh
#! /bin/bash
var="Welcome to the geekstuff"
echo ${#var}
$ ./len.sh
24
${#string}
Substring
${string:position}
${string:position:length}
Przykład
$ cat substr.sh
#! /bin/bash
var="Welcome to the geekstuff"
echo ${var:15}
echo ${var:15:4}
$ ./substr.sh
geekstuff
geek
Dopasowywanie najkrótszego łańcucha (z przodu)
${string#substring}
Dopasowywanie najkrótszego łańcucha (z tyłu)
${string%substring}
Przykład
$ cat shortest.sh
#! /bin/bash
filename="bash.string.txt"
echo ${filename#*.}
echo ${filename%.*}
$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string
Dopasowywanie najdłuższego łańcucha (z przodu)
${string##substring}
Dopasowywanie najdłuższego łańcucha (z tyłu)
${string%%substring}
Przykład
$ cat longest.sh
#! /bin/bash
filename="bash.string.txt"
echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}
$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash
Znajdowanie, dopasowywanie i zamiana (1)
${string/pattern/replacement}
Przykład zamiany tylko pierwszego
$ cat firstmatch.sh
#! /bin/bash
filename="bash.string.txt"
echo "After Replacement:" ${filename/str*./operations.}
$ ./firstmatch.sh
After Replacement: bash.operations.txt
Znajdowanie, dopasowywanie i zamiana (ALL)
${string//pattern/replacement}
Przykład zamiany wszystkich
$ cat allmatch.sh
#! /bin/bash
filename="Path of the bash is /bin/bash"
echo "After Replacement:" ${filename//bash/sh}
$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh
Znajdowanie, dopasowywanie i zamiana (FIRST)
${string/#pattern/replacement}
Znajdowanie, dopasowywanie i zamiana (LAST)
${string/%pattern/replacement}
Przykład
$ cat posmatch.sh
#! /bin/bash
filename="/root/admin/monitoring/process.sh"
echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}
$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh
Tworzymy wiele z “jednego”
$ echo last{mce,boot,xorg}.log
lastmce.log lastboot.log lastxorg.log
where last is Preamble and .log is the postscript
$ cat bkup.sh
set -x # expand the commands
da=`date +%F`
cp $da.log{,.bak}
$ ./bkup.sh
++ date +%F
+ da=2010-05-28
+ cp 2010-05-28.log 2010-05-28.log.bak
$ cat restore.sh
set -x # expand the commands
da=`date +%F`
cp $da.log{.bak,}
$ ./restore.sh
++ date +%F
+ da=2010-05-28
+ cp 2010-05-28.log.bak 2010-05-28.log
$ cat expand.sh
echo {oct,hex,dec,bin}
$ ./expand.sh
oct hex dec bin
$ cat sequence.sh
cat /var/log/messages.{1..3}
echo {a..f}{1..9}.txt
$ ./sequence.sh
May 9 01:18:29 x3 ntpd[2413]: time reset -0.132703 s
May 9 01:22:38 x3 ntpd[2413]: synchronized to LOCAL(0), stratum 10
May 9 01:23:44 x3 ntpd[2413]: synchronized to
May 9 01:47:48 x3 dhclient: DHCPREQUEST on eth0
May 9 01:47:48 x3 dhclient: DHCPACK from 23.42.38.201
..
a1.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt b1.txt b2.txt b3.txt b4.txt b5.txt b6.txt b7.txt b8.txt b9.txt c1.txt c2.txt c3.txt c4.txt c5.txt c6.txt c7.txt c8.txt c9.txt d1.txt d2.txt d3.txt d4.txt d5.txt d6.txt d7.txt d8.txt d9.txt e1.txt e2.txt e3.txt e4.txt e5.txt e6.txt e7.txt e8.txt e9.txt f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt f7.txt f8.txt f9.txt
Syntax:
<start>..<end>..<incr>
$ echo /var/log/messages.{1..7..2}
/var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7
$
$ A=2
$ echo /var/log/messages.{1..7..$A}
/var/log/messages.{1..7..2}
$