क्या परिवर्तनशील होना संभव है जो तीन पूर्व-निर्धारित संख्याओं में से एक यादृच्छिक संख्या चुनता है?
नमूना:
var= 10 or 100 or 1000
क्या परिवर्तनशील होना संभव है जो तीन पूर्व-निर्धारित संख्याओं में से एक यादृच्छिक संख्या चुनता है?
नमूना:
var= 10 or 100 or 1000
जवाबों:
मानों को रखने के लिए एक सरणी का उपयोग करें और अंतर्निहित चर का उपयोग करके उनके बीच चयन करें $RANDOM
। उदाहरण के लिए,
x[0]=10 # One decade
x[1]=100 # One century
x[2]=1000 # One millennium
for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10
यादृच्छिकता की गुणवत्ता सबसे अच्छा संभव नहीं होगी (इसके /dev/urandom
लिए बाइट्स पढ़ें ), लेकिन यह एक स्क्रिप्ट के लिए पर्याप्त से अधिक होना चाहिए।
नोट 1: जैसा कि लोगों ने टिप्पणियों में देखा है, सरणी तत्वों को व्यक्तिगत रूप से शुरू करने के बजाय एक निश्चित रूप से एक सरणी लिटरल का उपयोग कर सकते हैं x=(10 100 1000)
:।
नोट 2: सरणी में तत्वों की संख्या को हार्ड-कोडिंग के बजाय, एक रेडोम तत्व द्वारा निकाला जा सकता है ${x[$RANDOM%${#x[@]}]}
।
x=(10 100 1000)
बैश में एक शाब्दिक से एक सरणी बनाता है, यह अधिक पठनीय और अधिक मुहावरेदार होगा
x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.
ऐसा कुछ?
यदि आप बैश (या zsh या ksh93 ) का उपयोग कर रहे हैं, तो आप कर सकते हैं:
echo "$((10**($RANDOM%3+1)))"
या
var=$((10**($RANDOM%3+1)))
यह var को असाइन करने के लिए
आप GNU कोरुटिल्स shuf
उपयोगिता का भी उपयोग कर सकते हैं :
a=$(shuf -n1 -e 10 100 1000)
RANDOM
अन्य उत्तरों के अनुसार उपयोग करना लगभग निश्चित रूप से तेज है, हालांकि।
यहाँ थोड़ा गुप्त तरीका है:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
यह $var
आवश्यकतानुसार यादृच्छिक मान निर्दिष्ट करेगा । printf
प्रारूप स्ट्रिंग है 1%0Nd
- इस का कारण बनता है 0
के साथ मुद्रित करने के लिए N
अग्रणी शून्य है, जहां N
अंतराल में एक यादृच्छिक पूर्णांक हो जाएगा [1,3]
।