Есть дополнительные пробелы, созданные командой `echo` - PullRequest
0 голосов
/ 07 декабря 2018

среда: macOS 10.14

оболочка: zsh

Есть несколько строк кода из книги «Командная строка Linux»

#!/bin/bash
while [[ -n $1 ]]; do
        if [[ -r $1 ]]; then
                max_word=
                max_len=0
                for i in $(strings $1); do
                        len=$(echo $i | wc -c)
                        if (( len > max_len )); then
                                max_len=$len
                                max_word=$i
                        fi
                done
                echo "$1: '$max_word' ($max_len characters)"
        fi
        shift
done

Я запустил код с помощью команды

hello hello

hello - это файл, который содержит код и является исполняемым.Программа проста.Тем не менее, вывод:

hello: 'max_len=$len' (      13 characters)

Вы можете увидеть дополнительные пробелы после левого (.Я не знаю почему и не получил никакого решения через Google.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Зачем порождать дополнительный процесс?len=${#i} должен дать вам длину строки более эффективно.

0 голосов
/ 07 декабря 2018

Не происходит в Linux, но я уверен, что wc -c означает, что на Mac печатается «13» вместо «13».Один из способов решить эту проблему - изменить

len=$(echo $i | wc -c)

на

len=($(echo $i | wc -c))

. Этот обходной путь использует синтаксис массива, «13» будет интерпретироваться как массив, так что bash будет анализировать »(13)"который дает массив [" 13 "].len будет содержать массив, но при использовании в качестве обычной переменной bash будет использовать первый элемент, в этом случае урезанная версия wc -c output.

...