# REVISION: 2017-03-14
# Use of read and other bash specific features (bashisms)
कोष्ठकों एक सरणी, नहीं परिसीमित करने के लिए एक स्ट्रिंग उपयोग किया जाता है क्योंकि:
ids="1 2 3 4";echo ${ids// /|}
1|2|3|4
कुछ नमूने: दो तार के साथ $ids
से पॉप्युलेट: a b
और c d
ids=("a b" "c d")
echo ${ids[*]// /|}
a|b c|d
IFS='|';echo "${ids[*]}";IFS=$' \t\n'
a b|c d
... और अंत में:
IFS='|';echo "${ids[*]// /|}";IFS=$' \t\n'
a|b|c|d
कहाँ सरणी, इकट्ठे है $IFS
के 1 चार से अलग कर दिया है, लेकिन अंतरिक्ष के साथ सरणी के प्रत्येक तत्व में |
द्वारा बदल दिया।
जब आप ऐसा करेंगे:
id="${ids[@]}"
आप स्थानांतरित स्ट्रिंग के प्रकार स्ट्रिंग एक नया वेरिएबल को सरणीids
के विलय से निर्माण एक रिक्ति से।
नोट: जब "${ids[@]}"
एक अंतरिक्ष से अलग किए स्ट्रिंग दे, "${ids[*]}"
(एक स्टार *
के बजाय साथ हस्ताक्षर @
पर) एक स्ट्रिंग $IFS
की पहला वर्ण द्वारा अलग से प्रस्तुत करना होगा।
क्या man bash
का कहना है:
man -Len -Pcol\ -b bash | sed -ne '/^ *IFS /{N;N;p;q}'
IFS The Internal Field Separator that is used for word splitting
after expansion and to split lines into words with the read
builtin command. The default value is ``<space><tab><newline>''.
$IFS
के साथ खेलना:
set | grep ^IFS=
IFS=$' \t\n'
declare -p IFS
declare -- IFS="
"
printf "%q\n" "$IFS"
$' \t\n'
सचमुच space
, tabulation
और (यानीline-feed
। तो, जबकि पहला चरित्र एक जगह है। *
का उपयोग @
जैसा ही होगा।
लेकिन:
{
# OIFS="$IFS"
# IFS=$': \t\n'
# unset array
# declare -a array=($(echo root:x:0:0:root:/root:/bin/bash))
IFS=: read -a array < <(echo root:x:0:0:root:/root:/bin/bash)
echo 1 "${array[@]}"
echo 2 "${array[*]}"
OIFS="$IFS" IFS=:
echo 3 "${array[@]}"
echo 4 "${array[*]}"
IFS="$OIFS"
}
1 root x 0 0 root /root /bin/bash
2 root x 0 0 root /root /bin/bash
3 root x 0 0 root /root /bin/bash
4 root:x:0:0:root:/root:/bin/bash
नोट: लाइन IFS=: read -a array < <(...)
का उपयोग करेगाविभाजक के रूप में, $IFS
को स्थायी रूप से सेट किए बिना। ऐसा इसलिए है क्योंकि आउटपुट लाइन #2
विभाजक के रूप में वर्तमान रिक्त स्थान।
'$ {$ {आईडी [*]} ///|}' एक सिंटैक्स त्रुटि है, कि सब। डुनो जो आप यहां हासिल करने की कोशिश कर रहे हैं। –
1 हॉप में वेरिएबल प्रतिस्थापन प्राप्त करने का प्रयास कर रहा है, यह कभी भी काम नहीं करेगा ... – koola