- 1
- 2
- 3
- 4
- 5
- 6
# $1 - the string to be trimmed
trim_whitespace () {
local text=${1}
printf "$text" | awk '{gsub(/^[ ]*/,"",$0); gsub(/[ ]*$/,"",$0) ; print }'
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−129
# $1 - the string to be trimmed
trim_whitespace () {
local text=${1}
printf "$text" | awk '{gsub(/^[ ]*/,"",$0); gsub(/[ ]*$/,"",$0) ; print }'
}
oVirt, не какая-то пионерская поделка...
nil 27.07.2010 11:26 # 0
legion 27.07.2010 11:48 # 0
nil 27.07.2010 12:03 # 0
Но тут ничего утверждать нельзя, все зависит от ввода и от поставленной задачи.
legion 27.07.2010 11:50 # 0
local s="$1"
set -- $s
s="$1${s#*$1}"
shift $(($#-1))
s="${s%$1*}$1"
printf '[%s]\n' "$s"
}
вот эта функция удалит пробелы с начала и конца строки, не меняя ничего внутри.
nil 27.07.2010 12:04 # 0
nil 27.07.2010 12:36 # 0
legion 27.07.2010 12:58 # 0
В нём обычные конструкции, описанные в posix.
В вашем коде есть несколько нюансов:
1. shopt это башизм т.е. в dash этот код работать не будет... cобственно как и ${s%%*( )}.
2. (...), $(...) и `...` очень дорогие операции в шелле т.к. требуют создания отдельного контекста.
3. у printf первым аргументом идёт форматная строка. Если в $s окажутся специальные символы (например %s) то ваш скрипт огорчится. Эта проблема типична и для Cи, когда пишут printf(foo);
nil 27.07.2010 13:04 # 0
В моем примере подпроцесс чисто для того, чтобы не менять extglob, альтернативой можно сохранять значение и восстанавливать перед выходом.
printf опять-таки взят из исходного примера.
А если чисто по стандарту, лучше все-таки с помощью sed - нагляднее, единственно, что времени скушает на запуске. Однако, в примере один хрен awk используется, так что особо там не оптимизировали, и еще вопрос, надо ли...
legion 27.07.2010 13:20 # 0
nil 27.07.2010 13:25 # 0
Впрочем, некоторые шеллы не поддерживают стандарт в других, более пикантных местах, так что все равно страшно жить!
legion 27.07.2010 13:33 # 0
nil 27.07.2010 14:12 # 0
legion 27.07.2010 14:44 # 0