Вы можете напечатать все аргументы, кроме последнего, в отдельных строках, изменить порядок файлов, а затем поместить их все в файл, который является последним аргументом:
printf "%s\n" "${@:1:$#-1}" | tac | xargs cat > "${@: -1}"
То же самое, используя ноль в качестве разделитель потока:
printf "%s\0" "${@:1:$#-1}" | tac -s '' | xargs -0 cat > "${@: -1}"
Было бы очень желательно защитить от подсчета аргументов менее 2, потому что когда $# = 0
, то ${@: -1}
будет $0
. Тогда $0
может быть вашей оболочкой с полным путем ex, как /bin/bash
, поэтому >
может перезаписать ваш исполняемый файл оболочки!
Так же:
if (($# >= 2)); then printf "%s\0" "${@:1:$#-1}" | tac -s '' | xargs -0 cat > "${@: -1}"; fi