আমি কীভাবে আমার কমান্ড লাইনের অন্যান্য পরামিতিগুলির সাথে শেল পরিবর্তনশীলকে সংযুক্ত করতে পারি?


16

আমি কীভাবে আমার কমান্ড লাইনের অন্যান্য পরামিতিগুলির সাথে শেল পরিবর্তনশীলকে সংযুক্ত করতে পারি?

উদাহরণ স্বরূপ,

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql

আমি সম্মতি .sqlজানাতে হবে$WEBSITE

উত্তর:


26

${ }একটি পরিবর্তনশীল ঘেরে ব্যবহার করুন ।

কোঁকড়ানো বন্ধনী ছাড়া:

VAR="foo"
echo $VAR
echo $VARbar

দিতে হবে

foo

এবং কিছুই নয়, কারণ ভেরিয়েবলের $VARbarঅস্তিত্ব নেই।

কোঁকড়ানো বন্ধনী সহ:

VAR="foo"
echo ${VAR}
echo ${VAR}bar

দিতে হবে

foo
foobar

প্রথমটি বদ্ধ করা $VARপ্রয়োজনীয় নয়, তবে একটি ভাল অনুশীলন।

আপনার উদাহরণের জন্য:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql

এই কাজ bash, zsh, ksh, হয়তো অন্যদের খুব।


3
এটি বোর্ন-স্টাইলের সমস্ত শেল (বোর্ন, পসিক্স, বাশ, কেএস, জেডএস), সি-স্টাইলের শেল (সিএসএস, টিসিএসসি) এবং এমনকি ব্রেস ছাড়া মাছগুলিতে কাজ করে। সুতরাং এটি ইউনিক্স শেলের মধ্যে সত্যই সর্বজনীন। আমি বন্ধনীগুলিকে ভাল অনুশীলন বলব না। তবে আমি পরিবর্তনশীল বিকল্পগুলির ভাল অনুশীলনের আশেপাশে ডাবল কোট ব্যবহার করে নিয়মিত কল করি।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

1
@ গিলস, আমি আরও এগিয়ে গিয়ে বলব পরিবর্তে ভেরিয়েবল বিকল্পগুলির ডাবল কোট ব্যবহার না করা খুব খারাপ অভ্যাস।
স্টাফেন চেজেলাস

এছাড়াও, ${ }খেয়াল রাখুন যা কোনও অর্থে সংঘবদ্ধ নয়। উদাহরণস্বরূপ, ELP=elp && echo $ELP && man --h${EPL}কাজ করে না।
ফোকি

4

আপনি যা কিছু করতে চান তা যেমন ভেরিয়েবলের বিষয়বস্তুগুলিকে একত্রিত করুন, যেমন

/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"

ডাবল উদ্ধৃতিগুলি যুক্তিযুক্ত নয়: এখানেও >$WEBSITE.sqlকাজ করা যেত। পরিবর্তনশীল বিস্তারের আশেপাশে এগুলি দরকার হয় যখন ভেরিয়েবলের মানটিতে কিছু শেল বিশেষ অক্ষর (সাদা স্থান এবং \[?*) থাকতে পারে । আমি দৃ vari়ভাবে সমস্ত ভেরিয়েবল বিস্তৃতকরণ এবং কমান্ড প্রতিস্থাপনের অর্থাত্ সর্বদা লিখুন "$WEBSITE"এবং ডাবল কোট রাখার পরামর্শ দিচ্ছি "$(mycommand)"

আরও তথ্যের জন্য, $ VAR বনাম {{VAR see দেখুন এবং উদ্ধৃতি দিতে বা উদ্ধৃতি না করা দেখুন


2

আমি সাধারণত উক্তি ব্যবহার করি, যেমন echo "$WEBSITE.sql"

সুতরাং আপনি এটি লিখতে পারে:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"

3
এটি কাজ করে যেহেতু .একটি পরিবর্তনশীল নামে বৈধ অক্ষর নয়; দেখতে ফক্কড় এর উত্তর যদি আপনি একটি স্ট্রিং বৈধ অক্ষর দিয়ে শুরু যে কনক্যাটেনেট করতে চান (যেমন "$ WEBSITEsql" would কাজ নয়)
মাইকেল Mrozek
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.