Подстановка Bash показывает структуру каталогов

Un poco de perl retorcido:

perl -F'\|' -lane '
    $f2{ $F[0] }{ $F[1] } = 1;
    $f3{ $F[0] } = $F[2] if not exists $f3{ $F[0] }; 
  } END {
    for $key (sort keys %f2) {
        printf "%s|{%s}|%s\n", 
            $key, 
            join(",", map {chr(39). $_. chr(39)} sort keys %{$f2{$key}}), 
            $f3{$key};
    }
' file

Las primeras 2 líneas acumulan los datos usando matrices asociativas.
Luego, el bloque END recorre los datos, formatos e impresiones.

-1
23.05.2019, 14:15
1 ответ

Проблема в том, что вы не цитируете расширение, которое вы передаете echo.

Если расширение не заключено в кавычки, это приводит к разбиению поля результирующей строки на слова по пробелам (, предполагая значение по умолчанию $IFS), и, что особенно важно, генерация имени файла (с подстановкой )для каждого из слов.

Одно из слов — .*, и оно расширится на все скрытые имена в текущем каталоге.

Вместо:

foo="ModPagespeedLoadFromFileRuleMatch disallow.*"
echo "${foo//\\/\\\\}"

Или даже лучше,

foo="ModPagespeedLoadFromFileRuleMatch disallow.*"
printf '%s\n' "${foo//\\/\\\\}"

Это выведет

ModPagespeedLoadFromFileRuleMatch disallow.*

У вас та же проблема с echo $bar.

См. также:

5
28.04.2021, 23:33

Теги

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