एक चर असाइनमेंट में एक चर नाम होता है, जिसके बाद समान चिह्न होता है, उसके बाद (वैकल्पिक) मान होता है।
यह एक मान्य असाइनमेंट है:
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।