-c означает использовать дополнение символов в string1, или «любой символ, а не в string1 заменяет значение string1».
-t означает усечение первого набора значений до длины второго набора. Строка 2 имеет длину только 1 символ, поэтому строка1 усечена до этой длины.
Другими словами: тр-ct '\ п' '0' -> тр -t '\ 000 \ 001 \ 002 ...... ABCDEF ...' '0' -> тр '\ 000' '0'
Попробуйте это проверить:
printf '\000afoo\n' | tr -ct '\na' '7'
"Любой символ, не '\ п' или 'а'" (-с) становится '\ 000' (-t), потому что для строки 2 указано значение «7», длина которого равна 1. Теперь попробуйте следующее:
printf '\000afoo\n' | tr -ct '\na' '[7*]'
«Любой символ, который не является« \ n »или« a »(-c), остается, поскольку для любого символа в этом наборе используется« 7 ». Это поведение по умолчанию GNU и исторического BSD tr, поэтому «7» работает так же, как и «[7 *]», если -t не указано. Для System V и POSIX tr «[7 *]» является повторяющейся формой, а «7» просто заменяет первый символ в первом наборе на «7», что, возможно, более интуитивно и, безусловно, является частью того, где возникает ваша проблема from (GNU tr изменяет поведение в System V, если задано -t).
Оболочка не анализирует аргументы для 'tr' – Hasturkun
Как это выполнить? Может ли кто-нибудь сказать мне? – huashui