बिल्डिंग @cdarke (https://stackoverflow.com/a/12298757/415523) से वर्तमान उच्चतम मतदान जवाब पर, अगर मान (बजाय विशेष रूप से डिस्क पर फ़ाइलों) की एक सामान्य सरणी पर देख रहे हैं, पाश कोड के रूप में किया जाएगा इस प्रकार है:
a
b
c
d
e
c is the last
यह सुनिश्चित करता है कि केवल पिछले सरणी में आइटम alternat से चलाता है:
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
यह आउटपुट पैदावार ive कार्रवाई और यदि, सरणी में कोई अन्य आइटम अंतिम मान को डुप्लिकेट करता है, तो वैकल्पिक क्रिया नहीं है जो पहले डुप्लिकेट के लिए बुलाया जाता है।
फ़ाइलों के सरणी के मामले में किसी विशिष्ट निर्देशिका में, उदा।
array=($DIR/*)
... यह शायद का कोई खास महत्व (जब तक आप एक वास्तव में अजीब फाइल सिस्टम है!) है, क्योंकि एक ही निर्देशिका के अलग-अलग फ़ाइल नाम लगभग निश्चित रूप से अद्वितीय हैं
नहीं, मैं न केवल पिछले फ़ाइल पर कार्रवाई चाहते हैं, लेकिन (मेरे पाश उदाहरण की तरह) प्रत्येक फ़ाइल पर कार्रवाई करने और बस पर एक और ऑपरेशन करना अंतिम फाइल –
क्षमा करें अगर मैं स्पष्ट नहीं था, तो आप अंतिम फ़ाइल नाम का पता लगाने के लिए ls + tail का उपयोग कर सकते हैं। फिर अपने लूप में फ़ाइल नाम -ईक चेक की जांच करें। यह स्थिति होगी। मैं अपने * निक्स कंसोल से पहले नहीं हूं, बस एक विचार दे रहा हूं –
questzen
'ls | पूंछ 'काम नहीं करेगा अगर अंतिम फ़ाइल नाम में एक नई रेखा है (एक दुर्लभ घटना है, लेकिन असंभव नहीं है)। – chepner