Printf उद्धृत स्ट्रिंग

Oct 02 2020

मैं बैश में एक तालिका बनाने की कोशिश कर रहा हूं - मैंने सभी शीर्षकों को एक var में एकत्र किया है - हालांकि जब मैं इन तारों को "" में मुद्रित करता हूं तो नए कॉलम के रूप में माना जाता है और प्रिंटफ कमांड द्वारा एक के रूप में नहीं।

जब मैं समान मानों को सीधे पास करता हूं तो यह ठीक काम करता है, लेकिन जब मैं इसके बजाय $ var का उपयोग करता हूं तो मुझे अलग व्यवहार मिलता है।

$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words   other               values

$ values='"some spaced words" other values' $ echo $values "some spaced words" other values $ printf '%-20s' $values; echo -e "\n"
"some               spaced              words"              other               values

मैं स्पष्ट रूप से इस बारे में कुछ गलतफहमी कर रहा हूं कि मेरा चर कैसे भिन्न है < some string >और इसलिए अलग व्यवहार होता है।

चर का उपयोग करते समय मुझे आउटपुट 1 से कैसे मिलता है?

संपादित करें: मैं देख सकता हूं कि var संस्करण में उद्धरण हैं - क्या एक ऐसा तरीका है जिसे मैं एक चर के रूप में प्रिंट करने के लिए उद्धृत स्ट्रिंग पास कर सकता हूं?

जवाब

7 choroba Oct 02 2020 at 19:08

चर का विस्तार किसी भी कमांड के चलने से पहले किया जाता है , अर्थात printfयहाँ, और शब्द का विभाजन परिवर्तन के बाद होता है। स्केलर चर के बजाय एक सरणी का उपयोग करें:

values=('some spaced words' other values)
printf %-20s "${values[@]}"