(বাশ) স্ক্রিপ্টের মধ্যে ফাঁকা স্থান নিয়ে যুক্তিগুলি পাস করা


94

আমি নিম্নলিখিত বাশ দুটি স্ক্রিপ্ট পেয়েছি

a.sh:

#!/bin/bash
./b.sh 'My Argument'

বি.এস:

#!/bin/bash
someApp $*

কিছু অ্যাপ্লিকেশন বাইনারি $*1 এর পরিবর্তে 2 টি আর্গুমেন্ট ('আমার' এবং 'আর্গুমেন্ট') হিসাবে গ্রহণ করে ।

আমি বেশ কয়েকটি জিনিস পরীক্ষা করেছি:

  • কেবলমাত্র থ্রো অ্যাপ্লিকেশন চালানো b.shপ্রত্যাশা অনুযায়ী কাজ করে
  • b.shপ্রত্যাশিত হিসাবে Iterate + আর্গুমেন্টগুলিতে প্রতিধ্বনিত করে
  • $@পরিবর্তে ব্যবহার করে $*কোনও তাত্পর্য হয় না

6
চেষ্টা করুন someApp "$*"বাsomeApp "$@"
রাসেল উহল

4
ইউপ্প - একটি কবজ মত কাজ করে!
জন ভয়

উত্তর:


152

$*, উদ্ধৃত, দুটি শব্দে প্রসারিত। আপনার এটিকে উদ্ধৃত করতে হবে যাতে someAppএকটি যুক্তি পায়।

someApp "$*"

এটা যে আপনি ব্যবহার করতে চান সম্ভব $@পরিবর্তে, যাতে someAppদুটি আর্গুমেন্ট গ্রহণ করবে আপনাকে কল করার ছিল b.shযেমন

b.sh 'My first' 'My second'

সঙ্গে someApp "$*", someAppএকটি একক যুক্তি পাবেন My first My second। সাথে someApp "$@", someAppদুটি যুক্তি পাবেন, My firstএবং My second


25
যে কীটি সহজেই মিস করা যায় তা হ'ল "$ @" উদ্ধৃত করা দরকার, মনে হয়। $ @ যথেষ্ট নয়।
चमत्कार 2k

4
@ चमत्कार 2k সঠিক উদ্ধৃত, $@এবং $*অভিন্ন কাজ।
চিপনার

4
@ ম্যাট এটি সম্পূর্ণ আলাদা something "$ @" বিশেষ যে এতে প্রতিটি যুক্তিকে আলাদা করে উদ্ধৃত করা হয়। এর ফলে একাধিক যুক্তি হতে পারে। "$ কিছু" হ'ল যা কিছু চারপাশে উদ্ধৃত করা $ কিছু প্রসারিত হয় এবং সর্বদা একক যুক্তি হতে পারে be
কার্লো উড

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