Sobre la base de la actual respuesta más votado, desde @cdarke (https://stackoverflow.com/a/12298757/415523), si se mira un conjunto general de los valores (en lugar de archivos específicamente en el disco), el código del bucle sería la siguiente:
declare -a array
declare -i length current
array=(a b c d e c)
length=${#array[@]}
current=0
for VALUE in "${array[@]}"; do
current=$((current + 1))
if [[ "$current" -eq "$length" ]]; then
echo "$VALUE is the last"
else
echo "$VALUE"
fi
done
Esto produce la salida:
a
b
c
d
e
c is the last
Esto asegura que sólo el última elemento de la matriz activa la alternat Ive acción y que, si cualquier otro elemento en la matriz duplica el último valor, la acción alternativa es no llamado para los duplicados anteriores.
En el caso de una matriz de rutas a archivos en un directorio específico, p.
array=($DIR/*)
... es probable que sea menos de una preocupación, ya que los nombres de archivos individuales dentro del mismo directorio son casi ciertamente único (a menos que tenga una muy sistema de archivos extraño!)
No, no quieren procesar sólo el último archivo, pero para procesar cada archivo (como en mi ejemplo de bucle) y acaba de hacer otra operación en el último archivo –
Disculpe si no estaba claro, puede usar ls + tail para detectar el último nombre de archivo. luego, en su bucle, compruebe el nombre del archivo -eq check. Esa sería la condición. No estoy antes de mi consola * nix, solo dando una idea –
questzen
'ls | tail' no funcionará si el último nombre de archivo contiene una nueva línea (una ocurrencia rara, pero no imposible). – chepner