বাশ ওরফে কীভাবে "$ @" বোঝে?


1

আমি 2 টি কাজ করার জন্য একটি উপনাম লেখার চেষ্টা করছি

$alias cde='cd "$@" && echo'

তবে কোনও কারণে যখন আমি এটির সাথে কল করি

$cde test
test

যা ঘটেছিল তা হ'ল ইকোস টেস্ট:

দেখে মনে হচ্ছে আমার যুক্তিটি প্রথম বিবৃতিতে পাস হচ্ছে না, এবং এর পরিবর্তে পুরো ওরফেটির শেষে ব্যবহার করা হচ্ছে। আমার বোধগম্যতা থেকে, $@সমস্ত যুক্তি গ্রহন করার কথা ছিল যাতে এটি কখনও প্রতিধ্বনিত না হয়। আমি প্রথম অংশে কোনও যুক্তি ব্যবহার করতে পারি, এবং দ্বিতীয়টি নয়?


আমি একটি জেনেরিক উত্তর লিখেছি তবে আপনার প্রশ্নের কিছু অংশ রয়েছে যা অস্পষ্ট। "প্রথম অংশে আমি কোনও যুক্তি ব্যবহার করতে পারি, এবং দ্বিতীয়টি নয়?" - আপনি কি echoযুক্তি ছাড়াই চান ? এটি কী বোঝায়? কেন &&? আপনি ঠিক কি হতে চান?
কামিল ম্যাকিয়েরোভস্কি

উত্তর:


5

এলিয়াস যুক্তি গ্রহণ করে না। এটি কেবল আপনার কমান্ড লাইনের একটি স্ট্রিংয়ের সাথে অন্যটির সাথে প্রতিস্থাপন করে। $@কোনও উপনামের জন্য আলাদা "$@"নেই তাই এখানে প্রত্যাশা অনুযায়ী প্রসারিত হবে না। এটি প্রসারিত হয় যেন আপনি সরাসরি আপনার কমান্ড লাইনে টাইপ করেন (হাতে):

echo "$@"

(এটি সঠিক শব্দ বিভাজন দেখায় না তবে এটি বিন্দু নয়)।

তবে একটি ফাংশন আর্গুমেন্ট গ্রহণ করে এবং তার নিজস্ব আছে $@। আপনি যদি echoনিজের উরফ "যুক্তি" মুদ্রণ করতে চান তবে এটি আমার কাছে পরিষ্কার নয় । যদি তা হয় তবে আমি এটি একটি উলামের পরিবর্তে করব:

cde() { cd "$@" ; echo "$@" ; }

বরং বা:

cde() { cd "$@" ; pwd ; }

পার্থক্য হ্যান্ডলিং (প্রতিধ্বনিত করা) একাধিক যুক্তি, পথের প্রসারণ ..ইত্যাদি ইত্যাদির সাথে -Lএবং -Pবিকল্পগুলি কার্যকর হতে pwdপারে with

আপনি যদি ওভাররাইড করতে চান cdতবে আপনাকে commandঅসীম লুপ এড়াতে হবে (ফাংশনটি অন্যথায় নিজেকে কল করবে):

cd() { command cd "$@" ; pwd ; }

1
এটি আসলে এর চেয়ে খারাপ। "$@"যখন ওরফে কার্যকর আসলে যাই হোক না কেন বর্তমান অবস্থানগত প্যারাম হয়। set -- foo bar; cde baz->bash: cd: foo: No such file or directory
গ্লেন জ্যাকম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.