Спасибо за толчок, Мика. Это заставило мои творческие соки течь.
Обновлено:
Протестировано на Bash 3/4, все встроенные, без зависимостей:
Портативность: 100% совместимость только с Bash 3 и Bash 4
function _busybox_has() {
builtin command -v busybox >/dev/null ||
return 1
# Sanitize searches for '[' and '[['
a=$1
a=${a//[/\\[}
[[ $(busybox) =~ [[:space:]]($a)([,]|$) ]] ||
return 1
}
Нет ошибок, проверено на Dash:
Портативность: Портативная на всех ш с sed/egrep
_busybox_has() {
busybox 2>/dev/null >/dev/null ||
return 1
# Sanitize searches for '[' and '[['
a=$(echo $1 | sed 's/[[]/\\[/g')
busybox | egrep -oq "[[:space:]]($a)([,]|$)" ||
return 1
}
Нет ошибок, grep -e вместо egrep (более переносимый), протестировано на Dash:
Портативность: Портативная на всех ш с sed/grep -e
_busybox_has() {
busybox 2>/dev/null >/dev/null ||
return 1
# Sanitize searches for '[' and '[['
a=$(echo $1 | sed 's/[[]/\\[/g')
busybox | grep -oqe "[[:space:]]\($a\)\([,]\|\$\)" ||
return 1
}
Тестировать:
_busybox_has md5sum && echo yes || echo no