এখানে কিছু কর্মক্ষেত্র রয়েছে:
$ comm -3 <(declare | sort) <(declare -f | sort)
ভাঙ্গন:
declare
প্রতিটি সংজ্ঞায়িত ভেরিয়েবল (রফতানি হওয়া বা না) প্রিন্ট করে এবং ফাংশন।
declare -f
মুদ্রণ শুধুমাত্র ফাংশন।
comm -3
উভয়ের জন্য সাধারণ সমস্ত লাইন সরিয়ে ফেলবে। কার্যত এটি কেবল ভেরিয়েবলগুলি রেখে ফাংশনগুলি সরিয়ে ফেলবে।
রফতানি করা হয় না শুধুমাত্র ভেরিয়েবল মুদ্রণের জন্য:
$ comm -3 <(comm -3 <(declare | sort) <(declare -f | sort)) <(env | sort)
আরেকটি কাজ
$ declare -p
এটি কেবল ভেরিয়েবলগুলি মুদ্রণ করবে তবে কিছু কুৎসিত বৈশিষ্ট্য সহ।
declare -- BASH="/bin/bash"
declare -ir BASHPID=""
declare -A BASH_ALIASES='()'
declare -a BASH_ARGC='()'
...
আপনি ... কাটা ব্যবহার করে বৈশিষ্ট্যগুলি কেটে ফেলতে পারেন
$ declare -p | cut -d " " -f 3
একটি খারাপ দিক হ'ল আইএফএসের মান প্রদর্শিত হওয়ার পরিবর্তে ব্যাখ্যা করা হয়।
তুলনা করা:
$ comm -3 <(declare | sort) <(declare -f | sort)
...
IFS=$' \t\n'
...
$ declare -p | cut -d " " -f 3
...
IFS="
"
...
"
এক লাইনে থাকা একাকী হওয়ার কারণে এটি আরও প্রক্রিয়াকরণের জন্য আউটপুটটি ব্যবহার করা বেশ শক্ত করে তোলে । এটি রোধ করার জন্য সম্ভবত কিছু আইএফএস-ফু করা যেতে পারে।
তবুও আরেকটি কাজ, ব্যবহার করে compgen
:
$ compgen -v
ব্যাশ বিল্টিন compgen
সম্পূর্ণরূপে স্ক্রিপ্টগুলিতে ব্যবহার করা হত। এই লক্ষ্যে, compgen -v
সমস্ত সংজ্ঞায়িত ভেরিয়েবল তালিকাভুক্ত করে। অবক্ষয়: এটি কেবলমাত্র পরিবর্তনশীল নাম তালিকাভুক্ত করে, মানগুলি নয়।
মানগুলিও তালিকাভুক্ত করার জন্য এখানে একটি হ্যাক।
$ compgen -v | while read var; do printf "%s=%q\n" "$var" "${!var}"; done
সুবিধা: এটি একটি খাঁটি বাশ সমাধান। অসুবিধা: কিছু মূল্যবোধ বিভ্রান্ত হয় কারণ ব্যাখ্যাটির মাধ্যমে printf
। এছাড়াও পাইপ এবং / অথবা লুপ থেকে সাবশেল কিছু অতিরিক্ত ভেরিয়েবল যুক্ত করে।