Вы вообще ничего про субпроцессы и наследование переменных не знаете? Вы while запускаете через конвейер, т.е в отдельном субпроцессе и, естественно, в основном значение переменной не меняется. Это уже бесконечное количество раз описывалось и всегда в качестве контр-примера и приводится конструкция команда | while… Попробуйте поступить согласно каноническим правилам и все будет ОК:unset aids
while read line
do
aid=${line##*data-aid=\"}
aids=${aids:=${aids}|}${aid%%\"*}
#aids=3 #="${aids}|${aid}" # вот эта тройка даже не присваивается. Почему?
#echo "$aid" # Здесь вывод есть
done <<< "$content"
echo "$aids"
И еще, Вы уверены что после echo "$content" останутся кавычки в строке?