Zsh ওরফে উচ্ছ্বাসের উদ্ধৃতি


12

পাঠ্যটির বাইরে নতুন লাইনগুলি কেটে ফেলার বিষয়ে এই প্রশ্নটি অনুসরণ করে , আমি এটিকে নিম্নরূপে একটি zsh উর্ফে পরিণত করতে চাই:

alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'

আমি awk স্ক্রিপ্টের ভিতরে উদ্ধৃতিগুলি পালানোর চেষ্টা করেছি, তবে আমি এই ত্রুটিটি পেয়েছি:

awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted

(ফাইলটি বলা হয় bspsrobustness)

আমি যা চাই তা করার উপায় আছে? আমি মনে করি যে আমি এটিকে zsh ওরফে পরিবর্তে একটি এডকে স্ক্রিপ্টে পরিণত করতে পারি, এটি কি আমার সেরা বিকল্প?


যাইহোক, এটি সমস্ত (বোর্ন-স্টাইল, csh নয়) শেলের জন্য প্রযোজ্য।
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


9

আপনি একটি উলামের পরিবর্তে একটি zsh ফাংশন ব্যবহার করতে পারেন। কোন লাফিয়ে লাফিয়ে ওঠার জন্য নয়।

striplines() {
    awk '... awk body "with quotes" ...' "$@"
}

এবং এরপরে কিভাবে আমি এটা কল করবে: striplines filename?
Seamus

আপনি কি বোঝাতে পারেন যে কি "$@"করছে?
Seamus

@ সিমাস, হ্যাঁ আপনি একে একে ঠিক এর মতোই ডাকতেন। "$@"সিনট্যাক্স awk করার striplines আর্গুমেন্ট নির্বিঘ্ন পাঠায় - যদি প্রয়োজন হয় তাহলে বলুন, আপনার ফাইলের কোনো খালি জায়গা থাকা: striplines "file 1" "file 2"awk দুটি ফাইলের নামের পাঠানো would।
গ্লেন জ্যাকম্যান

5

কী চলছে তার একটি ধারণা পেতে, চালান

% alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
% striplines
awk
 /^$/ {print "\n"; } /./ {printf( " %s ",zsh);}

যেহেতু $অক্ষরগুলি ডাবল উদ্ধৃতিতে থাকে (যখন তারা নামটি প্রসারিত করার পরে প্রসারিত হবে), সেগুলি শেল দ্বারা ব্যাখ্যা করা হয়। উদ্ধৃতিটি সঠিকভাবে পেতে, পুরো উপন্যাস সংজ্ঞাটি একক উদ্ধৃতিতে রাখা আরও সহজ। একক উদ্ধৃতিগুলির মধ্যে যা আছে এটি হ'ল এটির ব্যবহার করা হবে যা প্রসারিত হবে। এখন যে আর্গুমেন্ট awkউদ্ধৃতি চিহ্ন মধ্যে বেষ্টিত, এটা স্পষ্ট যে আপনি আগে ব্যাকস্ল্যাশ প্রয়োজন \"$

alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\$0);}"'

একক-উদ্ধৃতিযুক্ত স্ট্রিংয়ের একক-উদ্ধৃতি দেওয়ার জন্য দরকারী আইডিয়ামটি হ'ল এটি একটি একক-উদ্ধৃত স্ট্রিংয়ে '\''আক্ষরিক একক উদ্ধৃতি রাখার উপায়। প্রযুক্তিগতভাবে একটি একক-উদ্ধৃত স্ট্রিং, একটি ব্যাকস্ল্যাশ-কোটেড 'এবং অন্য একক-উদ্ধৃত স্ট্রিংয়ের একটি সংক্ষিপ্তসার রয়েছে। ''শেষে জুস্টপোজযুক্ত খালি স্ট্রিংটি সরানো যেতে পারে।

alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\'

এই দীর্ঘ ব্যাখ্যার পরে, একটি প্রস্তাবনা: যখন এটি কোনও উপনামের জন্য খুব জটিল হয়, তখন একটি ফাংশন ব্যবহার করুন

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