আমি কীভাবে একটি ডিফল্ট মান হিসাবে খালি JSON কোঁকড়ানো বন্ধনী প্রতিধ্বনিত করব?


12

{}এনভ্বর অনুপস্থিত থাকলে প্রতিধ্বনিত করার জন্য আমি খালি JSON পাচ্ছি না। আমার }যদি হয় সেট করা থাকে তবে আউটপুটটিতে একটি পিছনে থাকে, বা পালানো প্রদর্শিত হয়।

bash-3.2$ unset X
bash-3.2$ echo "${X:-{}}"
{}
bash-3.2$ X=y
bash-3.2$ echo "${X:-{}}"
y}
bash-3.2$ echo "${X:-{\}}"
y
bash-3.2$ unset X
bash-3.2$ echo "${X:-{\}}"
{\}
bash-3.2$ echo "${X:-'{}'}"
'{}'
bash-3.2$ X=z
bash-3.2$ echo "${X:-'{}'}"
z

আমি কীভাবে এটি সঠিকভাবে পালাতে পারি?


আকর্ষণীয়, তবে ব্যাশ 4.3 দিয়ে echo "${X:-{\}}"ঠিক কাজ করেছে।
সের্গেই কোলোডিয়াজনি

@ সার্জিইক্লোডিএজনি যা ৪.২ এ স্থির হয়েছিল; আমি পসিক্স মান অনুসারে প্যারামিটার এক্সপেনশন অপারেটরগুলির নিম্নলিখিত শব্দ বিস্তারের উদ্ধৃতি সম্পর্কে কিছু আলোচনা মনে করি।
চিপনার

উত্তর:


14

আপনার ধনুর্বন্ধনী উদ্ধৃতি:

bash-3.2$ echo "${X:-"{}"}"
{}
bash-3.2$ X=y
bash-3.2$ echo "${X:-"{}"}"
y
bash-3.2$ unset X
bash-3.2$ echo "${X:-"{}"}"
{}

এখানে অভ্যন্তরীণ ডাবল উদ্ধৃতি আবশ্যক, যা মজাদার দেখাচ্ছে তবে সিনট্যাক্টিক্যালি ঠিক আছে।

একক উদ্ধৃতি কার্যকর হবে না এবং আমি কেন পুরোপুরি নিশ্চিত নই। এটি আসল নেস্টেড কোটিং, শেষ-পুনঃসূচনা নয়, যা আপনি ফাঁকা স্থান রেখে যাচাই করতে পারবেন Double ডাবল যদিও ঠিক কাজ করবে।


আমি মনে করি এটি পসিএক্স স্পেকের প্রাসঙ্গিক বাক্য: "নিম্নলিখিত প্যারামিটার সম্প্রসারণের পরিবর্তনগুলি সীমিত করে '' character 'অক্ষরটি এই বিভাগে এবং ডাবল-কোয়েটে পূর্বে বর্ণিত হিসাবে নির্ধারিত হবে।" আমি এটিকে অর্থ হিসাবে ব্যাখ্যা করি wordনিম্নলিখিতটি :-অবশ্যই বিশেষত ডাবল-কোটেড হওয়া উচিত, তাই "${X:-'{}'}"আক্ষরিক অর্থে ${X:-'{}অনুসরণ করা হবে '}। অনুমানটি কেন এত নির্দিষ্ট তা আমার কাছে অস্পষ্ট।
চিপনার

("পূর্বে বর্ণিত" দ্বারা বর্ণিত বাক্যটি হ'ল "ম্যাচিং ক্লোজিং
ব্রেসটি

9

আপনি প্রতারণা করতে পারেন এবং খালি ফলাফল হতে একটি পরিবর্তনশীল সেট করতে পারেন, এবং উদ্ধৃতি সংক্রান্ত সমস্যাগুলি এড়াতে পারেন

$ def="{}"
$ echo ${X:-$def}
{}
$ X=y
$ echo ${X:-$def}
y
$ unset X
$ echo ${X:-$def}
{}
$ 

5

আমি প্রায়শই যা করি তা হ'ল অক্ষরের জন্য হেক্স মানগুলির ব্যবহার করে printf:

bash-4.3$ echo "${X:-$(printf '\x7B\x7D')}"
{}
bash-4.3$ X="something"
bash-4.3$ echo "${X:-$(printf '\x7B\x7D')}"
something

কিছুটা ভার্জোজ, তবে কোট সম্পর্কে খুব বেশি চাপ না দিয়ে কাজ করে।

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