শেলের মধ্যে পরিবর্তনীয় দোলন


111

আমার কাছে একটি পরিবর্তনশীল বলা আছে filepath=/tmp/name

ভেরিয়েবল অ্যাক্সেস করতে, আমি জানি যে আমি এটি করতে পারি: $filepath

আমার শেল স্ক্রিপ্টে আমি এই জাতীয় কিছু করার চেষ্টা করেছি (ব্যাকটিকগুলি উদ্দেশ্যযুক্ত)

`tail -1 $filepath_newstap.sh`

এই লাইনটি ব্যর্থ হয়, ডুউহ !, কারণ ভেরিয়েবল বলা হয় না $filepath_newstap.sh

আমি _newstap.shপরিবর্তনশীল নামের সাথে কীভাবে যুক্ত করব ?

দয়া করে নোট করুন যে ব্যাকটিকগুলি অভিব্যক্তি মূল্যায়নের জন্য উদ্দিষ্ট।

উত্তর:


196

ব্যবহার

"$filepath"_newstap.sh

বা

${filepath}_newstap.sh

বা

$filepath\_newstap.sh

_সনাক্তকারীদের মধ্যে একটি বৈধ অক্ষর। বিন্দু নয়, তাই শেলটি বিভক্ত করার চেষ্টা করেছিল $filepath_newstap

আপনি set -uকোনও অনির্ধারিত পরিবর্তনশীল উল্লেখ করার সময় ত্রুটি সহ শেল প্রস্থান করার জন্য আপনি ব্যবহার করতে পারেন ।


7
set -uআপনি যদি কোনও অপরিজ্ঞাত ভেরিয়েবল উল্লেখ করেন তবে স্ক্রিপ্টটি বাতিল হওয়ার কারণও উল্লেখ করতে পারেন।
ট্রিপলি

4
ব্যবহার ${}এবং ডাবল উদ্ধৃতিগুলির মধ্যে পার্থক্য কী ? আমি কি অন্যের চেয়ে বেশি পছন্দ করব?
user31389

4
@ ব্যবহারকারী31389: পার্থক্যটি যখন ভেরিয়েবলটিতে সাদা স্থান থাকে তখন কেবলমাত্র ডাবল উদ্ধৃতিগুলি কাজ করে।
চোরোবা

@ ছোটোবা ভেরিয়েবলের নাম বা ভেরিয়েবলের মান ?
জোশুয়া পিন্টার

@ জোশুয়াপিন্টার: পরিবর্তনশীল নামটিতে কখনও সাদা স্থান থাকতে পারে না।
choroba

17

ভেরিয়েবল নামের চারদিকে কোঁকড়ানো ধনুর্বন্ধনী ব্যবহার করুন:

`tail -1 ${filepath}_newstap.sh`

4
আপনার কি ডাবল উক্তি দরকার নেই?
মাইকেলসনডনউন

পছন্দ করুন নিরাপদ থাকতে, হ্যাঁ, তবে প্রশ্নটি স্পষ্ট করে কোনও ফাঁকা জায়গা ছাড়াই একটি পথ বর্ণনা করেছে এবং আরও পরামর্শ দিয়েছিল যে সমস্যাটি উদ্দেশ্যটির পরিবর্তে $filepath_newstap.shব্যাখ্যা করা হচ্ছে , যা সমস্যার সমাধান করবে। ${filepath_newstap}.sh${filepath}_newstap.sh

@ মিমিয়েলসনডেন যে আমাকে এমন কিছু বলেন যা আমি ইতিমধ্যে অবগত নই। আপনার কেন মনে হয় ডাবল কোট লাগবে?

কারণ আপনি স্ট্রিং ইন্টারপোলেশন করার চেষ্টা করছেন, এবং এর জন্য আপনার ডাবল উদ্ধৃতি প্রয়োজন
মাইকেলসনডন

@ মিমিয়েলসনউদ্দিন প্যারামিটারের বিস্তৃতি ডাবল কোটে বা কোটের বাইরে সম্পূর্ণরূপে হয়। একক উদ্ধৃতি বা শনাক্তকারীদের সাথে বৈধ নয় উক্ত বা অন্য অক্ষরগুলির সাথে অক্ষরগুলি পৃথক করা প্যারামিটারের প্রসারণ রোধ করার একমাত্র উপায়। উদাহরণস্বরূপ, "$filepath"_fooএবং ${filepath}_fooউভয় প্রসারিত হবে /tmp/name_foo। যাইহোক, '$filepath'_foo, "$"filepath_foo, এবং $"filepath"_fooসব এড়ানোর সম্প্রসারণ সম্পূর্ণরূপে would। এই কেন export PATH=$PATH:$addpathকাজ যোগ করার জন্য :$addpath(যা পরামিতি সম্প্রসারণ করা হতে পারে) এর PATHএনভায়রনমেন্ট ভেরিয়েবল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.