Я намагаюся написати просту функцію bash, яка бере в якості своїх аргументів ряд файлів та / або каталогів. Слід:
- Повністю кваліфікуйте імена файлів.
- Сортуйте їх.
- Видаліть дублікати.
- Роздрукуйте все, що існує насправді.
- Повернути кількість неіснуючих файлів.
У мене є сценарій, який майже робить те, що я хочу, але падає на сортування. Повернене значення сценарію в такому вигляді є правильним, але вихід не є (несортований і дублюється). Якщо я відменюю | sort -u
твердження, як зазначено, вихід правильний, але значення повернення завжди 0
.
Примітка. Простіші рішення для вирішення проблеми вітаються, але питання справді полягає в тому, чому це відбувається в коді, який у мене є. Тобто, чому додавання труби, здавалося б, зупиняє збільшення сценарію, збільшуючи змінну r
?
Ось сценарій:
function uniqfile
{
local r=0
for arg in "$@"
do
readlink -e "$arg" || (( ++r ))
done #| sort -u ## remove that comment
return $r
}
for arg in "$@"
доfor arg
. "Якщо" у СЛОВАх ...; " немає, тоді "в" $ @ "'передбачається." - допомога для