আমার স্ক্রিপ্ট কেন কনসোল আউটপুটে নেতৃস্থানীয় সাদা স্থান বাদ দেয়?


10

আমার কাছে নিম্নলিখিত স্ক্রিপ্ট রয়েছে:

#!/bin/bash
function consoleWriteLine() {
  echo $* >&2
}

consoleWriteLine "    indented by 4 spaces"

আমি যখন এটি চালনা করি, আমি নিম্নলিখিত আউটপুটটি পাই:

$ ./test.sh
indented by 4 spaces

আমার 4 স্পেস কোথায় গেল? এবং আমি তাদের কীভাবে ফিরিয়ে আনব?

উত্তর:


22

echoআপনার ফাংশনটিতে কেবল উদ্ধৃতি দিন :

function consoleWriteLine() {
  echo "$*" >&2
}

echoকেবল স্থান দ্বারা পৃথক পৃথক একাধিক যুক্তি লক্ষ্য করে এবং সেগুলি একক স্থান দ্বারা পৃথক করে মুদ্রণ করে । দেখা:

$ echo a b c
a b c
$ echo a b             c
a b c
$ echo "a b             c"
a b             c

গত উদাহরণে স্ট্রিং a b cহয় এক একক যুক্তি এবং echoed যেমন হয়।


আমার এখানে বোঝার চাবিকাঠিটি ছিল, আর্গুমেন্টের উদ্ধৃতিটি প্রাথমিকভাবে কেবল সাদা অংশকে সংরক্ষণ করা হবে যতক্ষণ না এটি প্রবেশ করা হয় consoleWriteLine। দ্বিতীয়বার এটি echo'ডি' হয়ে যাওয়ার পরে অতিরিক্ত উদ্ধৃতি দ্বারা শ্বেত স্থানটি আবার সংরক্ষণ করা দরকার। আমি কখনই অনুমান করতে পারিনি যে আপনি চারপাশে উদ্ধৃতি দিতে পারেন $*
ডের হচস্টাপলার

4
আপনি কেবল চারপাশে উদ্ধৃতি রাখতে পারবেন না $*, উদ্ধৃতিটি $@দেওয়ার সময় পৃথক শব্দের প্রসারিত করার জন্য বৈকল্পিকটি বিশেষত তৈরি করা হয়েছিল : "$@"বেশ কয়েকটি যুক্তি হতে পারে, "$*"সর্বদা কেবল একটি। echoএটি কয়েকটি আদেশের মধ্যে একটি যেখানে এটি কোনও পার্থক্য রাখে না।
অ্যালেক্সিস

4

আমার এই সমস্যা ছিল,

অনুযায়ী এই ব্লগটি আপনি IFS পরিবর্তন করতে ডিফল্টরূপে যেমন সাদা স্থান উপস্থিত রয়েছে প্রয়োজন এবং তাই দেখেন "XXX yyy zzzz" তাদের মধ্যে সাদা স্থান 3 স্ট্রিং হিসেবে।

IFS='\n'

কমান্ডের আগে এটি সংশোধন করবে এবং পরিবর্তনটি সরাতে আইএফএস আনসেট করবে

unset IFS


2
এটি কাজ করছে, তবে স্বীকৃত সমাধান (উদ্ধৃতি যোগ করা) অনেক নিকটতর।
সিজারসোল

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