Нежелательное пространство в расширении фигурной скобки

Возможно, его блокирует антивирусный сканер Windows? Я знаю, что пытался установить metasploit на Kali в WSL, и мой антивирусный сканер сошел с ума от всех данных об эксплойтах. Что логично, но я не думал об этом заранее.

3
10.01.2021, 16:50
2 ответа

echo печатает свои аргументы, разделенные пробелами, даже если они включают (или генерируют )символов новой строки. Кроме того, он добавляет один символ новой строки в конце своего вывода (, если это неecho -n).

Используйтеprintf:

printf '%s\n' {0..4..2}" "{0..2..2}

Когда echoделает что-то неожиданное, всегда учитывайтеprintf. После того, как вы ознакомитесь с printf, он может даже стать вашим первым выбором.

18
18.03.2021, 22:37

Причина, по которой вы получаете пробел, в том, что начало каждой строки усложнено. Команда echoвыдает аргументы, разделенные пробелом.Каждый аргумент состоит из расширения {0..4..2}и {0..2..2}, за которым следует новая строка. Когда вы сложите эти два вместе, вы увидите, что пробел в начале каждой строки на самом деле является пробелом, который echoиспускает между элементами.

На ум приходит несколько решений. Во-первых, если вы не возражаете против пустой строки в начале вывода, вы можете поместить новую строку в начале каждого расширения,

echo -e "\n"{0..4..2}" "{0..2..2}

Другим способом является перебор аргументов и вывод их по отдельности

for seq in {0..4..2}" "{0..2..2}; do echo "$seq"; done

или

echo -e {0..4..2}"\n"{0..2..2} | xargs printf "%d %d\n"
2
18.03.2021, 22:37

Теги

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