एक चर असाइनमेंट में एक चर नाम होता है, जिसके बाद समान चिह्न होता है, उसके बाद (वैकल्पिक) मान होता है।
यह एक मान्य असाइनमेंट है:
ABC=123
"$x"1=1
एक मान्य असाइनमेंट नहीं है, क्योंकि "$x"1
एक चर नाम नहीं है। यह हो सकता है eval एक चर नाम के uated, लेकिन यह नहीं है। वास्तव में, शेल का मानना है कि यह एक आदेश है।
आप जो हासिल करना चाहते हैं, उसे करने का एक तरीका यह है:
eval "$x"1=1
बैश में एक और तरीका (लेकिन अन्य गोले में नहीं) है:
declare "$x"1=1
या फिर (केवल बैश-केवल):
let "$x"1=1
(आपके मामले में बहुत अंतर नहीं है।)
लेकिन, जैसा कि जकुजे ने टिप्पणी में उल्लेख किया है , आप संभवतः सरणियों के साथ जाना चाहते हैं, यदि आपके शेल में उन्हें (ksh, bash या zsh) है।
संपूर्णता के लिए:
eval
मनमाना आदेशों को क्रियान्वित करता है। इसलिए, यदि समान चिह्न के दाईं ओर आपके पास एक चर है जो कुछ कमांड तक फैलता है, तो उस कमांड को निष्पादित किया जाएगा। निम्नलिखित कोड:
x=a
y='$(echo hello)'
eval "$x=$y"
के बराबर है a=hello
।
declare
वैरिएबल असाइन करने के लिए एक बैश बिलिन है और किसी भी कमांड को निष्पादित नहीं करेगा। निम्नलिखित कोड:
x=a
y='$(echo hello)'
declare "$x=$y"
के बराबर है a='$(echo hello)'
।
let
के समान है declare
, इसमें वह कमांड निष्पादित नहीं करता है। लेकिन इसके विपरीत declare
, let
अंकगणितीय संचालन के लिए इस्तेमाल किया जा सकता है:
let a="1 + 2"
के बराबर है a=3
।