@HaukeLaging: хорошо, это, вероятно, источник этого поведения `НК` (возможно `с netcat`) должен быть стандартным инструментом на большинстве систем, это не тот случай на RedHat? Простой? Возможно. Самый трудоемкий и неудобный? Почти всегда. Огромное спасибо ребята за информацию, я думал, что я должен очистить мою голову, поскольку я был очень обеспокоен.. я в порядке.. благодарен.. мне придется повторно, когда я получаю стандартную работу. @ElizabethHenning может быть ты прав, но я подозреваю, что он обратное тоже бывает верно. (Я не могу требовать каких-либо знаний по этому вопросу, потому что я имел счастье избежать обоих типов скучно.) Отлично, спасибо. Я собираюсь смотреть в оба и видеть, если я могу получить мою голову вокруг них. Еще раз спасибо!

Это может быть полностью сделано в Баш. Хотя делать работы со строками в цикле в bash медленно, есть простой алгоритм, который является логарифмической количества операций раковины, так чисто bash является жизнеспособным вариантом даже для длинных строк.

longest_common_prefix () {
 локальный префикс= Н
 ## Усечь двух строк до минимальной их длины
 если [[ ${#1} -ГТ ${#2} ]]; затем
 набор -- "${1:0:${#2}}" "$2"
еще
 набор -- "$1" "${2:0:${#1}}"
интернет
 ## Бинарный поиск по первым различающихся характером, накапливая общий префикс
 во время [[ ${#1} -ГТ 1 ]]; делать
Н=$(((${#1}+1)/2))
 если [[ ${1:0:$н} == ${2:0:$н} ]]; затем
префикс=префикс${1:0:$н}
 набор -- "${1:$н}" "${2:$н}"
еще
 набор -- "${1:0:$н}" "${2:0:$н}"
интернет
сделано
 ## Добавить один оставшийся символ, если
 если [[ 1 $= $2 ]]; тогда префикс=префикс$1; Интернет
 е %с "префикс"
}

Стандартный набор инструментов включает в себя СМР для сравнения бинарных файлов. По умолчанию она указывает смещение в байтах первой различающихся байт. Существует особый случай, когда одна строка является префиксом другой: СМР выдает сообщение в stderr; простой способ справиться с этим, чтобы взять строку в зависимости от того, является кратчайшим.

longest_common_prefix () {
 местное значение lc_all=C и смещение префикс
 смещение=$(экспорт значение lc_all; СМР <(Е %С "$1") <(е %с "$2") 2>/dev/нуль)
 если [[ -N $в смещение ]]; затем
 смещение=${смещение%,*}; смещение=${смещение##* }
префикс=${1:0:$((смещение-1))}
еще
 если [[ ${#1} -это ${#2} ]]; затем
префикс=$1
еще
префикс=$2
интернет
интернет
 е %с "префикс"
}

Обратите внимание, что ЦМП работает на байт, но Баша строковые манипуляции действует на персонажей. Таким образом, разница в многобайтовых локалях для примеры районов, используя кодировку UTF-8. Выше функция выводит самый длинный префикс байтовую строку. Для обработки символьных строк с помощью этого метода, можно сначала преобразовать строки фиксированной ширины кодирования. Предполагая, что набор символов стандарта является подмножеством Unicode, как UTF-32 подходит.

longest_common_prefix () {
 локальные смещения префикс языкового="${значение lc_all:=$языкового}"
 смещение=$(установлено значение lc_all; для категории lc_messages=с / СС <(Е %С "$1" | библиотека iconv -T в кодировке UTF-32) \
 <(Е %С "$2" | библиотека iconv -T в кодировке UTF-32) 2>/dev/нуль)
 если [[ -N $в смещение ]]; затем
 смещение=${смещение%,*}; смещение=${смещение##* }
префикс=${1:0:$((смещение/4-1))}
еще
 если [[ ${#1} -это ${#2} ]]; затем
префикс=$1
еще
префикс=$2
интернет
интернет
 е %с "префикс"
}