readonly और unset
In this page:
readonly CONSTANT_NAME=value
unset variable_name
readonly से एक Constant Declare करना
readonly NAME=value एक step में एक variable बनाता है और इसे immutable mark करता है, इसलिए इसे बाद में reassign करने की कोई भी कोशिश value को silently change करने के बजाय एक error message के साथ fail होती है।
यह उन values के लिए useful है जो आपकी script में असली constants represent करती हैं, जैसे एक fixed configuration path।
उदाहरण: Declaring a Constant with readonly
#!/bin/bash
readonly MAX_RETRIES=3
echo "Max retries allowed: $MAX_RETRIES"
Login to try C/C++/Java/PHP code in the editor
एक readonly Variable को Change करने की कोशिश करना
अगर आप एक readonly variable को reassign करने की कोशिश करें, Bash stderr पर एक error print करता है और assignment refuse करता है, लेकिन default रूप से script इसके बाद भी run होती रहती है (यह automatically halt नहीं होती)।
कोशिश को इस तरह wrap करना कि script failure पर react कर सके इसे gracefully handle करने देता है।
उदाहरण: Attempting to Change a readonly Variable
#!/bin/bash
readonly LOCKED="original"
if ! (LOCKED="changed") 2>/dev/null; then
echo "As expected, LOCKED could not be reassigned"
fi
echo "LOCKED is still: $LOCKED"
Login to try C/C++/Java/PHP code in the editor
unset से एक Variable हटाना
unset NAME एक variable की definition को पूरी तरह delete कर देता है, इसलिए बाद में इसे refer करना वैसे behave करता है जैसे इसे कभी assign नहीं किया गया था (एक empty string में expand होना, या set -u के under एक error trigger करना)।
यह एक empty string assign करने से अलग है, जो variable को defined लेकिन empty रखता है।
उदाहरण: Removing a Variable with unset
#!/bin/bash
temp_value="scratch data"
echo "Before unset: [$temp_value]"
unset temp_value
echo "After unset: [$temp_value]"
if [ -z "${temp_value+set}" ]; then
echo "temp_value is completely unset"
fi
Login to try C/C++/Java/PHP code in the editor
Empty String बनाम Truly Unset
${var+set} literal word set में expand होता है अगर var बिल्कुल भी defined हो (empty string के रूप में भी), और कुछ नहीं में अगर यह पूरी तरह unset हो।
यह parameter expansion दो states के बीच बताने का standard तरीका है, जो value पर एक plain -z check नहीं कर सकता।
उदाहरण: Empty String vs Truly Unset
#!/bin/bash
empty_var=""
unset gone_var
echo "empty_var defined? ${empty_var+yes}"
echo "gone_var defined? ${gone_var+yes}"
Login to try C/C++/Java/PHP code in the editor
- एक
readonlyvariable को change याunsetकरने की कोशिश करना और इसके silently काम करने की उम्मीद करना; Bash refuse करता है और एक error print करता है, और एक non-interactive script में यह settings के आधार पर script को exit भी कर सकता है। unset varको एक variable को empty string,var="", set करने के साथ confuse करना; एक empty-string variable अब भी set (defined) है और एक पूरी तरह unset वाले से अलग तरीके से-vया${var+x}tests pass करता है।- यह मान लेना कि
readonlyसिर्फ=के through reassignment रोकता है; यह उस same shell के अंदर उस same variable परunsetको भी block करता है।
readonly NAME=valueshell की बची life के लिए एक variable की value immutable बना देता है; इसे reassign करने की कोशिश एक error produce करती है।unset NAMEएक variable की definition को पूरी तरह हटा देता है, इसे empty string में set करने से अलग।- एक
readonlyvariable को उसी shell session में बाद मेंunsetनहीं किया जा सकता। - दोनों defensive scripting के लिए useful हैं:
readonlyconstants को protect करता है,unsettemporary variables साफ़ करता है या एक fresh state ensure करता है।
Chapter Quiz — Complete all 13 topics to unlock
0/13 topics done
Complete these topics first: