আমি উত্তর তোমার পরে হয় উহ্য হয় মনে (যদি বিবৃত নয়) Vinko এর উত্তর , যদিও এটা শুধু বানান আউট করা হয় না। ভিএআর সেট করা আছে কি না তা ফাঁকা রয়েছে কি না সেট করার জন্য আপনি ব্যবহার করতে পারেন:
if [ -z "${VAR+xxx}" ]; then echo VAR is not set at all; fi
if [ -z "$VAR" ] && [ "${VAR+xxx}" = "xxx" ]; then echo VAR is set but empty; fi
আপনি সম্ভবত দ্বিতীয় লাইনের দুটি পরীক্ষার সাথে একটির সাথে একত্রিত করতে পারেন:
if [ -z "$VAR" -a "${VAR+xxx}" = "xxx" ]; then echo VAR is set but empty; fi
যাইহোক, যদি আপনি Autoconf জন্য ডকুমেন্টেশন পড়ুন, আপনি যে তারা 'পদ মিশ্রন সুপারিশ করি না পাবেন -a
' এবং সঙ্গে মিলিত পৃথক সহজ পরীক্ষা ব্যবহার করার প্রস্তাব না &&
। আমি এমন কোনও সিস্টেমের মুখোমুখি হইনি যেখানে সমস্যা আছে; এর অর্থ এই নয় যে তাদের অস্তিত্ব ছিল না (তবে তারা এই দিনগুলিতে খুব বিরল, এমনকি যদি তারা অতীতের মতো বিরল নাও হত)।
আপনি এই বিবরণ, এবং অন্যান্য সংশ্লিষ্ট জানতে পারেন শেল প্যারামিটার প্রসারণও , test
বা[
কমান্ড শর্তাধীন অভিব্যক্তি ব্যাশ ম্যানুয়াল।
এই প্রশ্নের উত্তর সম্পর্কে আমাকে সম্প্রতি ইমেলের মাধ্যমে জিজ্ঞাসা করা হয়েছিল:
আপনি দুটি পরীক্ষা ব্যবহার করুন, এবং আমি দ্বিতীয়টি ভালভাবে বুঝতে পারি, তবে প্রথমটি নয়। আরও স্পষ্টভাবে আমি পরিবর্তনশীল প্রসারণের প্রয়োজনীয়তা বুঝতে পারি না
if [ -z "${VAR+xxx}" ]; then echo VAR is not set at all; fi
এটি কি একই কাজ করবে না?
if [ -z "${VAR}" ]; then echo VAR is not set at all; fi
সুষ্ঠু প্রশ্ন - উত্তরটি 'না, আপনার সহজ বিকল্পটি একই জিনিস করে না' do
ধরুন আমি আপনার পরীক্ষার আগে এটি লিখেছি:
VAR=
আপনার পরীক্ষা বলবে "VAR মোটেও সেট করা নেই", তবে আমার বলবে (জড়িত হয়ে কারণ এটি কিছুই প্রতিধ্বনিত করে না) "VAR সেট করা আছে তবে এর মান খালি থাকতে পারে"। এই স্ক্রিপ্ট চেষ্টা করুন:
(
unset VAR
if [ -z "${VAR+xxx}" ]; then echo JL:1 VAR is not set at all; fi
if [ -z "${VAR}" ]; then echo MP:1 VAR is not set at all; fi
VAR=
if [ -z "${VAR+xxx}" ]; then echo JL:2 VAR is not set at all; fi
if [ -z "${VAR}" ]; then echo MP:2 VAR is not set at all; fi
)
আউটপুটটি হ'ল:
JL:1 VAR is not set at all
MP:1 VAR is not set at all
MP:2 VAR is not set at all
পরীক্ষার দ্বিতীয় জোড়ায়, চলকটি সেট করা থাকে তবে এটি খালি মানটিতে সেট করা থাকে। এটি স্বতন্ত্র ${VAR=value}
এবং ${VAR:=value}
স্বরলিপিগুলি তৈরি করে। জন্য পূর্বোক্ত ${VAR-value}
এবং ${VAR:-value}
, এবং ${VAR+value}
এবং ${VAR:+value}
, ইত্যাদি।
হিসাবে Gili থেকে তার আউট পয়েন্ট উত্তর , যদি আপনি চালাতে bash
সঙ্গে set -o nounset
বিকল্প, তারপর মৌলিক উত্তর উপরোক্ত সঙ্গে ব্যর্থ unbound variable
। এটি সহজে প্রতিকার করা হয়:
if [ -z "${VAR+xxx}" ]; then echo VAR is not set at all; fi
if [ -z "${VAR-}" ] && [ "${VAR+xxx}" = "xxx" ]; then echo VAR is set but empty; fi
অথবা আপনি ( সমতুল্য ) এর set -o nounset
সাথে বিকল্পটি বাতিল করতে পারেন ।set +u
set -u
set -o nounset