ডাব্লুসিসি <<< "$ স্ট্রিং" প্রিন্টফ "$ স্ট্রিং" এর চেয়ে এক-বাইট-দীর্ঘ দৈর্ঘ্যটি কেন দেখায়? wc-?


11

আকস্মিকভাবে, আমি খুঁজে পেয়েছি যে wcএটি কীভাবে বাশ থেকে ইনপুট পায় তার উপর নির্ভর করে আলাদাভাবে গণনা করা হয়:

$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5

এই - আইএমএইচও বিভ্রান্তিকর - আচরণ কোথাও ডকুমেন্টেড? wcএখানে কী গণনা করা যায় - এটি কি অনুমান করা নিউলাইন?


3
od -cআপনার কাছে যা আছে তা দেখতে আপনি সর্বদা পাইপ করতে পারেন।
থরবজর্ন রাভন অ্যান্ডারসন

বা, আরও ভাল xxd -g1,।
Ruslan

1
আমি আশা করি printf "$s"আপনার আসল স্ক্রিপ্ট নয় ... আশা করি আপনি বোঝাতে চেয়েছিলেনprintf "%s" "$s"
ব্যবহারকারীর 4141686

যেহেতু প্রিন্টফ সম্পর্কে অনেক মন্তব্য ছিল, তাই আমি সেরা পোস্ট অনুশীলনের প্রতিফলনের জন্য আমার পোস্টটি সম্পাদনা করেছি।
রেক্সকোগিটান

উত্তর:


38

পার্থক্যটি এখানে স্ট্রিংয়ে যুক্ত হওয়া একটি নতুন লাইন দ্বারা সৃষ্ট। দেখুন ব্যাশ ম্যানুয়াল :

ফলাফলের তার আদর্শ ইনপুটের, একটি একক স্ট্রিং হিসেবে সরবরাহ করা হয় একটি newline সঙ্গে যোগ কমান্ড (অথবা ফাইল বর্ণনাকারী এন যদি এন নির্দিষ্ট করা)।

wc একইভাবে গণনা করা হচ্ছে তবে এর ইনপুটটি ভিন্ন।


7
যদি উল্লেখ করা উচিত যে কোনও অতিরিক্ত নিউলাইন চরিত্র ছাড়াই ভেরিয়েবলের (স্বেচ্ছাসেবী) বিষয়বস্তু মুদ্রণের জন্য এটি হওয়া উচিত printf %s "$var"(বা print -rn -- "$var"কেএসএস-জাতীয় শাঁস সহ) printf "$var"যা $varসেগুলি %বা ব্যাকস্ল্যাশ অক্ষরের মানগুলির জন্য সঠিকভাবে কাজ করবে না (বা -বেশিরভাগ বাস্তবায়ন দিয়ে শুরু করুন )।
স্টাফেন চেজেলাস

নোট করুন যে ইউনিক্স বন্দরে মূল এখানে-স্ট্রিং বাস্তবায়ন rcসেই নতুন লাইনের চরিত্রটি যুক্ত করেনি।
স্টাফেন চেজেলাস

26

এটি এখানে স্ট্রিং পুনঃনির্দেশক দ্বারা যুক্ত একটি সফল নিউলাইন:

$ s="hello"
$ hexdump -C <<<"$s"
00000000  68 65 6c 6c 6f 0a                                 |hello.|
00000006
$ printf "$s" | hexdump -C
00000000  68 65 6c 6c 6f                                    |hello|
00000005
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.