initial commit
This commit is contained in:
58
bash/acronym/acronym.sh
Executable file
58
bash/acronym/acronym.sh
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
# V1: original version
|
||||
# V2: final printf changeto avoid subshell
|
||||
|
||||
# external tools: none
|
||||
|
||||
# v1: initial version
|
||||
|
||||
# set to mask to enable logs
|
||||
debug=0
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
usage() {
|
||||
echo "acronym.sh word1 [...]" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# $1: log level, then strings to display.
|
||||
log () {
|
||||
(( debug & $1 )) && shift && echo "${@}"
|
||||
}
|
||||
|
||||
|
||||
# check for basic errors. We will accept multiple args:
|
||||
# acronym.sh i love suchi = acronym "i love suchi"
|
||||
(( $# < 1 )) && usage
|
||||
|
||||
# valid word separators
|
||||
VALID_SEPARATORS="-_*"
|
||||
|
||||
# replace valid chars with space, merge args in 1 string
|
||||
words="${*//[$VALID_SEPARATORS]/ }"
|
||||
log 1 valid separators ${#words[@]} "$words"
|
||||
|
||||
# remove remaining non alpha chars (keep blanks)
|
||||
words="${words//[^[:alpha:][:blank:]]/}"
|
||||
log 1 keep alpha "${words[@]}"
|
||||
|
||||
# capitalize, make an array
|
||||
words=(${words^^})
|
||||
log 1 "words ${#words[@]} ${words[@]}"
|
||||
|
||||
# print 1st chars
|
||||
printf -v result "%c" ${words[@]}
|
||||
log 1 result "$result"
|
||||
|
||||
echo "$result"
|
||||
|
||||
exit 0
|
||||
|
||||
# Indent style for emacs
|
||||
# Local Variables:
|
||||
# sh-basic-offset: 4
|
||||
# sh-indentation: 4
|
||||
# indent-tabs-mode: nil
|
||||
# comment-column: 60
|
||||
# End:
|
Reference in New Issue
Block a user