команда ls: как игнорировать регистр без globbing

Чистое bash функция, только для неудачного случая, когда Нельзя установить ничего соответствующего. Это, и вероятно будет, может перестать работать на более сложном XML:

function xmlpath()
{
  local expr="${1//\// }"
  local path=()
  local chunk tag data

  while IFS='' read -r -d '<' chunk; do
    IFS='>' read -r tag data <<< "$chunk"

    case "$tag" in
      '?'*) ;;
      '!–-'*) ;;
      '![CDATA['*) data="${tag:8:${#tag}-10}" ;;
      ?*'/') ;;
      '/'?*) unset path[${#path[@]}-1] ;;
      ?*) path+=("$tag") ;;
    esac

    [[ "${path[@]}" == "$expr" ]] && echo "$data"
  done
}

Использование:

bash-4.1$ xmlpath 'config/global/resources/default_setup/connection/host' < MagePsycho.xml
localhost

Известные проблемы:

  • медленный
  • поиски только именами тега
  • никакое декодирование символьной сущности
5
27.04.2014, 02:24
2 ответа
[115044] Не с [115431]ls [115432] нет. Вы могли бы, однако, использовать нечто подобное:

Причина этого в том, что команда [115433]shopt[115434] влияет только на то, как глобусы расширяются оболочкой. Таким образом, когда вы выполняете [115435]ls *a

после [115438], выполняя команду [115439]shopt[115440], которая расширяется вашей оболочкой до

Так что, как сказал Кевин, глобус расширяется [115441]до [115442] передачи на [115443]ls[115444], поэтому [115445]nocaseglob[115446] не будет иметь никакого эффекта, когда вы даете простую строку, а не глобус.[115049].

5
27.01.2020, 20:37
[115042] Нет. Глобусное расширение обрабатывается оболочкой до вызова [115429]ls[115430].[115043].
2
27.01.2020, 20:37

Теги

Похожие вопросы