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


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.