Похоже, что ни один из этих ответов не приводит к правильному возвращению значения, повторение ответа хорошо с очень простой процедурой, но, скажем, вы хотите, чтобы вывод скрипта в действии, это бесполезно.У меня нет лучшего ответа, но у меня не так много времени, чтобы выяснить это, поэтому я просто собираюсь предложить вывести именно то, что вы хотите, во временный файл и прочитать его (удивительно, что это не былоупомянуто на сегодняшний день):
#!/bin/bash
CP="AAA"
func() {
ls -1 | (
while read JAR
do
if [ ! -z "$CP" ]; then
CP=${CP}':'
fi
CP=${CP}${JAR}
done
echo "$CP" > /tmp/cp-value-file
)
}
func
CP=$(cat /tmp/cp-value-file)
echo $CP
Недостаток: в некоторых случаях потребуется записывать на диск каждую итерацию цикла.