Вам нужно eval:
for ((i=0; i < $1; ++i)); do
echo "iterator=$i";
# for debugging
echo eval "$3"
eval "$3"
done
, конечно, вы должны обратить внимание на правильную цитату в командной строке. Ваш пример LS * $ (($ 2 + $ I)) *. GNU | WC -L
опасно в этом смысле, потому что переменные ссылки решаются в «
, то есть до прогона скрипта. Вам нужны одиночные кавычки:
doNtimes.sh 10 0 'ls *$(($2 + $i ))*.gnu | wc -l'
yes _do | head -n 10 | 3<&0 0>&- \
<<\INIT sh -s -- my args
alias _do='echo these are "$@."'
exec <&3 3>&-
#END
INIT
Вы также можете заставить скорлупу подать довольно легко. xargs
тоже сработает.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.