বাশ-এ পরিবর্তনশীলটিতে ডিফল্ট অ্যারে লিখুন


10

আমি আশা করেছিলাম

excludes="${excludes:-( ${default_excludes[@]} )}"

$excludesখালি থাকলে অ্যারে হতে হবে । দুর্ভাগ্যক্রমে স্টাফ পরে :-স্ট্রিং হিসাবে নেওয়া হয়। আমি কি কিছু সিনট্যাক্স বিকৃতি মিস করেছি, বা আমার কি ক্লানকি ব্যবহার করতে হবে?

if [ -z "${excludes:-}" ]
then
    excludes=( "${default_excludes[@]}" )
fi

?

উত্তর:


10

আপনি এই সিনট্যাক্সের সাহায্যে অন্য অ্যারে থেকে একটি অ্যারে তৈরি করতে পারেন:

arr1=( "${arr2[@]}" )

এটি এই ডিফল্ট-মান সিনট্যাক্সে অনুবাদ করা যেতে পারে:

arr1=("${arr1[@]:-${arr2[@]}}")

আমি কিছু প্রান্তের কেসগুলি পরীক্ষা করেছি, যেমন অ্যারে সদস্যদের মতো ফাঁকা স্থান বা নতুন লাইনের সাথে এবং এগুলি সঠিকভাবে পরিচালনা করছে বলে মনে হচ্ছে।


3
যদি আরআর 2 খালি হয়, এন্টার 1 খালি স্ট্রিং সহ দৈর্ঘ্যের একটি অ্যারে হয়ে যায়
অ্যান্ডি

2

যেহেতু আমার এমন কেস ছিল যেখানে আমার arr2শূন্যতা থাকতে পারে তবে সেট করা আছে, তাই আমি কোনও সহজ সমাধান খুঁজে পেলাম না। সুতরাং আমি একটি ফাংশন এবং গ্লোবাল টেম্প ভেরিয়েবল সঙ্গে যেতে ছিল। তবে এটি প্রতিটি ক্ষেত্রে এবং ব্যাশ 3.2 এবং ব্যাশ 4 এ কাজ করে

function set_temp_array()
{ # 1 - source_array_name $2-* default_values
  local default="$1"
  shift
  if declare -p $default >& /dev/null; then
    default="${default}[@]"
    TEMP_VAR=("${!default}")
  else
    TEMP_VAR=("${@}")
  fi
}

set_temp_array arr1 "${arr2[@]}"
arr1="${TEMP_VAR[@]}"

আমি মানগুলিকে অনুলিপি করতে অপ্রত্যক্ষ অ্যারে রেফারেন্স ব্যবহার করি TEMP_VAR, তবে আমি ব্যাশে কোনও অপ্রত্যক্ষ অ্যারের অ্যাসাইনমেন্ট বের করতে পারি না, সুতরাং দুটি লাইন এবং টেম্প ভেরিয়েবল

set -euসেখানে আপনার ভক্তদের জন্য

function set_temp_array()
{ # 1 - source_array_name $2-* default_values
  local default="$1"
  shift
  if declare -p $default >& /dev/null; then
    default="${default}[@]"
    TEMP_VAR=(${!default+"${!default}"})
  else
    TEMP_VAR=(${@+"${@}"})
  fi
}

set_temp_array arr1 ${arr2+"${arr2[@]}"}
arr1=(${TEMP_VAR+"${TEMP_VAR[@]}"})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.