Почему я не должен заключать строковую переменную в кавычки в этом конкретном случае?

Обновлено: Пересмотр для многострочных значений $page, спасибо @Wildcard!

Вы были очень близки ко второй строке. Если ваша строка 1 действительно работает, то для второй строки вы должны попробовать:

times="$(echo "$page" | wc -l)"

Объяснение

  • $( и ) - это подстановка команды, эквивалентная тому, что мы делали с обратными кавычками (в man bash они называются обратными кавычками), но я предпочитаю $( ), потому что их легче заметить в коде
  • Просто наличие $page не передаст ничего в wc -l
  • Bash вместо этого подумает, что вы хотите запустить все, что написано в $page как команду, а затем передать вывод этой команды в wc -l, так что если $page содержит 5 bla, он будет думать, что 5 bla - это команда. Это приведет к ошибкам, подобным тем, которые вы обнаружили, увидев command not found
  • Поэтому для передачи значения мы можем echo переменную $page
  • Однако если $page содержит многострочные значения, echo $page по умолчанию приведет к потере этих строк, они просто станут пробелами
  • Чтобы избежать этого нежелательного результата, сохраните значение и эти новые строки в $page, заключив их в кавычки: echo "$page"

Итак, используя echo "$page", wc -l сможет правильно получить значение $page.

2
11.05.2019, 02:29
0 ответов

Теги

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