Возможно, подход хвоста лучше (более гибок), но как альтернатива:
{ echo -n "print \"Hello World\""; cat; } > p1
Он добавит «sbin» 3 раза, как должен, но не будет повторять вновь добавленные «sbin» в том же цикле.
После 2-го примера:
echo "${array[@]}"
#=> etc bin var sbin sbin sbin
set etc bin var
while [ "$#" -gt 1 ]
do [ "$1" = bin ] &&
set "$@" sbin
printf %s\\n "$1"
shift;done
Это выполнит итерацию по вашему списку, условно добавит sbin
в конец указанного списка и включит sbin
в повторяемом содержимом.