Move under www to ease rsync
This commit is contained in:
49
www/eps/hpr2729/hpr2729_bash18_ex1.sh
Executable file
49
www/eps/hpr2729/hpr2729_bash18_ex1.sh
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Example 1 for Bash Tips show 18: transforming words in a string
|
||||
#
|
||||
# This is a contrived and overly complex example to show that replacing
|
||||
# selected words in a phrase by different words is a non-trivial exercise!
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# Enable extglob
|
||||
#
|
||||
shopt -s extglob
|
||||
|
||||
#
|
||||
# What we'll work on and where we'll store the transformed version
|
||||
#
|
||||
phrase='Now is the time for all good men to come to the aid of the party'
|
||||
newphrase=
|
||||
|
||||
#
|
||||
# How to transform words in the phrase and a place to store the keys
|
||||
#
|
||||
declare -A transform=([good]='bad' [men]='people' [party]='Community')
|
||||
declare -a keys
|
||||
|
||||
#
|
||||
# Build an extglob pattern from the keys of the associative array
|
||||
#
|
||||
keys=( ${!transform[@]} )
|
||||
targets="${keys[*]/%/|}" # Each key is followed by a '|'
|
||||
targets="${targets%|}" # Strip the last '|'
|
||||
targets="${targets// }" # Some spaces got in there too
|
||||
pattern="@(${targets})" # Make the pattern at last
|
||||
|
||||
#
|
||||
# Go word by word; if a word matches the pattern replace it by what's in the
|
||||
# 'transform' array. Because the pattern has been built from the array keys
|
||||
# we'll never have the case where a word doesn't have a transformation.
|
||||
#
|
||||
for word in $phrase; do
|
||||
if [[ $word == $pattern ]]; then
|
||||
word=${transform[$word]}
|
||||
fi
|
||||
newphrase+="$word "
|
||||
done
|
||||
echo "$newphrase"
|
||||
|
||||
exit
|
||||
Reference in New Issue
Block a user