বাশ স্ক্রিপ্টে কমান্ড লাইন আর্গুমেন্টগুলি পরিবর্তন করার কোনও উপায় আছে? উদাহরণস্বরূপ, বাশ স্ক্রিপ্টটি এই জাতীয়ভাবে আহ্বান করা হয়েছে:
./foo arg1 arg2
স্ক্রিপ্টের মধ্যে আরগ 1 এর মান পরিবর্তন করার কোনও উপায় আছে কি? কিছুটা এইরকম:
$1="chintz"
উত্তর:
আপনাকে সমস্ত যুক্তি পুনরায় সেট করতে হবে। উদাহরণস্বরূপ $3
:
$ set -- "${@:1:2}" "new" "${@:4}"
মূলত আপনি সমস্ত যুক্তি তাদের বর্তমান মানগুলিতে সেট করেছেন , আপনি যে পরিবর্তন করতে চান সেগুলি (গুলি) ব্যতীত। POSIX 7 দ্বারাও নির্দিষ্ট করা আছে ।set --
"${@:1:2}"
স্বরলিপি দুই প্রসারিত হয় (অত: পর 2
স্বরলিপি) অফসেট অবস্থানগত থেকে শুরু আর্গুমেন্ট 1
(অর্থাত $1
)। এটি "$1" "$2"
এই ক্ষেত্রে একটি সংক্ষিপ্তকরণ, তবে আপনি উদাহরণস্বরূপ প্রতিস্থাপন করতে চাইলে এটি আরও বেশি কার্যকর "${17}"
।
সামর্থ্য এবং রক্ষণাবেক্ষণের জন্য অনুকূলিতকরণ, আপনি নির্ধারণ করা $1
এবং $2
আরও অর্থপূর্ণ ভেরিয়েবলগুলি (আমি জানি না, input_filename = $1
এবং output_filename = $2
বা কোনও কিছু) ভাল করতে পারেন এবং তারপরে input_filename = 'chintz'
স্ক্রিপ্টটির ইনপুটটি অপরিবর্তিত রেখে, সেইগুলির মধ্যে একটিতে ওভাররাইট করা ( স্ক্রিনে) থাকতে পারে in অন্য কোথাও দরকার
আমি জানি এটি একটি পুরানো তবে থেকালার দ্বারা আমি উত্তরটি খুব সহায়ক বলে খুঁজে পেয়েছি , সুতরাং আমি এই ধারণাটি ব্যবহার করেছি এবং এর উপরে কিছুটা প্রসারিত করেছি যাতে কোনও যুক্তি সংজ্ঞায়িত না হয়ে ডিফল্ট যুক্ত করতে সক্ষম হয় - উদাহরণস্বরূপ:
# set defaults for the passed arguments (if any) if not defined.
#
arg1=${1:-"default-for-arg-1"}
arg2=${2:-"default-for-arg-2"}
set -- "${arg1}" "${arg2}"
unset arg1 arg2
আমি আশা করি এটি অন্য কারও কাজে আসবে।