मैं बस एक निश्चित निर्देशिका में सभी फाइलों को बैश सरणी में लाना चाहता हूं (यह मानते हुए कि फाइलों में से कोई भी नाम में एक नई पंक्ति नहीं है):
इसलिए:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
खाली परिणाम!
यदि मैं किसी फ़ाइल का उपयोग करने का राउंडअबाउट तरीका अस्थायी या अन्यथा करता हूँ:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
परिणाम!
लेकिन mapfileएक पाइप से ठीक से क्यों नहीं पढ़ा जाता है?
findऔर mapfileयहाँ का उपयोग कर रहे हैं और बस नहीं myarr=(mysqldump*)? यह भी रिक्त स्थान और newlines के साथ फ़ाइल नाम के साथ काम करेंगे।
nullglob( shopt -s nullglob) को चालू करना है । myarr=(mysqldump*)('mysqldump*')