Сценарий оболочки, печатающий содержание переменных, содержащих вывод команды, удаляет символы новой строки [дубликат]

Можно найти перекрытие на x и на оси y и умножить тех.

int LineOverlap(int line1a, line1b, line2a, line2b) 
{
  // assume line1a <= line1b and line2a <= line2b
  if (line1a < line2a) 
  {
    if (line1b > line2b)
      return line2b-line2a;
    else if (line1b > line2a)
      return line1b-line2a;
    else 
      return 0;
  }
  else if (line2a < line1b)
    return line2b-line1a;
  else 
    return 0;
}


int RectangleOverlap(Rect rectA, rectB) 
{
  return LineOverlap(rectA.x1, rectA.x2, rectB.x1, rectB.x2) *
    LineOverlap(rectA.y1, rectA.y2, rectB.y1, rectB.y2);
}
12
задан Jonathan Leffler 4 November 2015 в 15:39
поделиться

1 ответ

Если вы хотите сохранить символы новой строки, заключите переменную в двойные кавычки:

echo "$stuff"

Когда вы пишете ее без двойных кавычек, оболочка расширяет $ stuff в список слов, разделенных пробелами (где «слова» - это последовательности непробельных символов, а символы пробела - это пробелы, табуляции и новые строки; после экспериментов кажется, что формы , возврат каретки и пробелы не считаются пробелом).


Демонстрация интерпретации управляющих символов как пробелов. ASCII 8 - возврат, 9 - табуляция, 10 - новая строка (LF), 11 - вертикальная табуляция, 12 - подача страницы, 13 - возврат каретки. Первая команда генерирует последовательность символов, разделенных различными управляющими символами. Вторая команда повторяет результат с сохранением исходных символов - см. Шестнадцатеричный дамп. Третья команда отображает результат, когда оболочка разделяет слова; вы можете видеть, что табуляция и новая строка были заменены пустым (0x20).

$ x=$(./ascii 64 65 8 66 67 9 68 69 10 70 71 11 72 73 12 74 75 13 76 77)
$ echo "$x" | odx
0x0000: 40 41 08 42 43 09 44 45 0A 46 47 0B 48 49 0C 4A   @A.BC.DE.FG.HI.J
0x0010: 4B 0D 4C 4D 0A                                    K.LM.
0x0015:
$ echo  $x  | odx
0x0000: 40 41 08 42 43 20 44 45 20 46 47 0B 48 49 0C 4A   @A.BC DE FG.HI.J
0x0010: 4B 0D 4C 4D 0A                                    K.LM.
0x0015:
$ 
23
ответ дан 2 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

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