Почему `echo -ne "commit $(git cat-file commit cc540cb | wc -c)\0"` выводит пробелы перед подстановкой команды?

Если временной интервал для состояния гонки был меньше секунды, установите startretries=<number you want>. Однако при необходимости вы можете установить гораздо более высокое значение. Ниже приведен пример.

[program:test]
startretries=10
-1
13.04.2020, 12:26
1 ответ

wc -cвыводит пробелы перед числом:

$ wc -c <file
       6

В вашей первой команде строка commitи вывод wc -cзаключены в строку в двойных кавычках.

Во второй команде вывод wc -cиспользуется без кавычек.

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

Вы получите тот же вывод со второй командой, если процитируете подстановку команды.

Хотя вы считаете, что вторая команда с printf«правильная», не цитировать подстановку команды, как правило, плохая идея из-за разделения и подстановки, которые делает оболочка.

Я бы предложил указать подстановку команды (, потому что это всегда хорошая практика ), и вместо этого явно удалить пробелы из выводаwc -c:

(printf "commit %s\0" "$(git cat-file commit cc540cb | wc -c | tr -d ' ')"; git cat-file commit cc540cb) | hexdump -Cv
1
19.03.2021, 02:29

Теги

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