সাবশেল বা ফাংশনের আউটপুট প্রতিস্থাপনের জন্য কীভাবে ব্যাশ বিল্টিন ব্যবহার করবেন


9

আমি সাব-শেল বা অন্য কোনও ব্যাশ ফাংশনের আউটপুট প্রতিস্থাপনের জন্য অন্তর্নির্মিত ব্যাশ সাবস্ট্রিং ব্যবহার করার চেষ্টা করছি।

নিম্নলিখিত কমান্ডগুলি zsh এ বেশ ভাল কাজ করে; তবে bad substitutionব্যাশে ত্রুটির ফলস্বরূপ :

${${PWD##*/}//trunk/latest}

অথবা

${$(basename $PWD)//trunk/latest}

আউটপুটটি হ'ল সর্বশেষ ফোল্ডার হওয়া উচিত $PWD, latestযখন আমার বর্তমান ডিরেক্টরিটি প্রতিস্থাপন করা হবেtrunk

তাই /home/user/trunkহয়ে উঠতে হবেlatest

ভেরিয়েবল বা পাইপগুলির উপর নির্ভর না করে কোনও বাশ সমতুল্য চেইন স্ট্রিং সংস্করণগুলিকে অনুমতি দেয়? বা ব্যাশ অন্তর্নির্মিতরা কেবল ইনপুটটিকে স্ট্রিং বা প্লেইন ভেরিয়েবল হতে দেয়?

উত্তর:


9

না, প্রতিস্থাপন অপারেটরদের বাসা বাঁধার জন্য এটি অনন্য zsh।

নোট করুন যে zshযেমন পছন্দ করে (t)csh, আপনি করতে পারেন ${PWD:t:s/trunk/latest/}।

যদিও bashইতিহাস বিস্তারের জন্য সেই সমস্ত csh ইতিহাস সংশোধককে সমর্থন করে তবে এটি প্যারামিটার বিস্তারের জন্য তাদের সমর্থন করে না।

এখানে bashএকটি অস্থায়ী ভেরিয়েবল ব্যবহার করুন:

var=${PWD##*/} var=${var//trunk/latest}

3

বাশ দিয়ে এটি ব্যবহার করে দেখুন:

[[ $PWD =~ .*/(.*) ]] && echo "${BASH_REMATCH[1]//trunk/latest}"

বা একটি আদেশ সহ:

[[ $PWD =~ .*/(.*) && ${BASH_REMATCH[1]//trunk/latest} =~ (.*) ]]

ফলাফল হয় ${BASH_REMATCH[1]}


0

তুমি কি চাও...?

PWD=latest

আপনার অনুরোধের জন্য আমি কোনও পদ্ধতি দেখছি না। আপনি যদি $PWDডাব্লু / সর্বশেষের সমস্ত প্রতিস্থাপন করতে চান - তবে এটি করার সর্বোত্তম cdউপায়টি সর্বশেষতম।

[ /home/user/trunk = "$PWD" ] && OLDPWD=../latest cd -

... যা আপনাকে সর্বশেষে নিয়ে যাবে এবং স্ট্যাডআউটের পাথের নামটি মুদ্রণ করবে। cd -আবার কাজ করে আপনি যেখান থেকে এসেছিলেন সেখান থেকে ফিরে যেতে পারেন । আপনি একই ডাব্লু / করতে পারেন $CDPATH:

mkdir -p /tmp/{1..5}  ; \
CDPATH=/tmp cd 3; cd -; \
echo "${CDPATH:-empty or unset::}" "$OLDPWD"

/tmp/3
/home/mikeserv
empty or unset:: /tmp/3

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