2009-11-11 19 views
36

मेरे पास एक शेल स्क्रिप्ट है जो मुझे स्क्रिप्ट के अंदर वैश्विक चरों तक पहुंचने देगी, लेकिन जब मैं अपना खुद का निर्माण करने का प्रयास करता हूं, तो इसका जवाब मिलता है: कमांड नहीं मिला।शैल स्क्रिप्ट चर - कमांड नहीं मिला

#!/bin/bash 
J = 4 
FACE_NAME = "eig$J.face" 
USER_DB_NAME = "base$J.user" 

जब मैं ऊपर स्क्रिप्ट चलाने मैं:

./test1.sh line 2: J: command not found 
./test1.sh line 3: FACE_NAME: command not found 
./test1.sh line 4: USER_DB_NAME: command not found 

कोई भी विचार ?? मैं विंडोज एक्सपी के तहत सिग्विन का उपयोग कर रहा हूं।

+1

चर बनाने के दौरान अपने चर नामों में सभी सीएपीएस का उपयोग न करें। सम्मेलन से, पर्यावरण चर (पथ, संपादक, शेल, ...) और आंतरिक खोल चर (BASH_VERSION, RANDOM, ...) पूरी तरह से पूंजीकृत हैं। अन्य सभी परिवर्तनीय नाम लोअरकेस होना चाहिए। चूंकि परिवर्तनीय नाम केस-संवेदी हैं, इसलिए यह सम्मेलन आकस्मिक रूप से पर्यावरण और आंतरिक चर को ओवरराइड करने से बचाता है। – BullShark

उत्तर

91

प्रयास करें इस (नोटिस मैं = के दोनों ओर से रिक्त स्थान को हटा दिया है):

#!/bin/bash 
J="4" 
FACE_NAME="eig$J.face" 
USER_DB_NAME="base$J.user" 

बैश रिक्त स्थान पसंद नहीं है जब आप चर घोषित - भी यह सबसे अच्छा उद्धृत हर मूल्य बनाने के लिए है (लेकिन यह आवश्यक नहीं है)।

+15

ओह मैन, यह बहुत निराशाजनक है। वह मेरी समस्या थी। धन्यवाद! –

+0

धन्यवाद एंड्रयू हरे। बस एक ही निराशाजनक समस्या थी! –

+2

मैं सच में समझ में नहीं आता क्यों बैश अंतरिक्ष स्वीकार नहीं करता है :( –

5

न 'के बीच रिक्त स्थान छोड़ "="

J=4 
FACE_NAME="eig${J}.face" 
USER_DB_NAME="base${J}.user" 
11

यह एक अच्छा विचार चर नाम जब आप अन्य पाठ में एक चर एम्बेड कर रहे हैं अलग करने के लिए ब्रेसिज़ उपयोग करने के लिए है:

#!/bin/bash 
J=4 
FACE_NAME="eig${J}.face" 
USER_DB_NAME="base${J}.user" 

डॉट यहां आपके लिए नौकरी है लेकिन यदि वहां कोई अन्य चरित्र था, तो इसे परिवर्तनीय नाम के हिस्से के रूप में व्याख्या किया जा सकता है।

+1

{} का प्रयोग खोल प्रोग्रामिंग के लिए सबसे अच्छा अभ्यास है। –

+0

इस पाठ के बीच में चर परिसीमित करने के लिए मेरी समस्या थी! पहला समाधान मेरे लिए काम नहीं करता था, लेकिन ऐसा हुआ। –

संबंधित मुद्दे