এটি শেল স্ক্রিপ্টিং এর অর্থ shell {@: 2}


27

আমি এটি শেল স্ক্রিপ্টে দেখতে পাচ্ছি।

variable=${@:2}

এটা কি করছে?


স্ক্রিপ্টে ঠিক কী এটি প্রদর্শিত হয়েছিল? সিনট্যাক্সটি অ্যারের মতো দেখায় তবে কিছু টুকরো অনুপস্থিত। আপনি কি স্ক্রিপ্ট থেকে এই লাইনের চারপাশে কয়েকটি লাইন পোস্ট করতে পারেন?
slm

এটি দ্বিতীয় বর্ণ থেকে শুরু করে একটি পরিবর্তনশীল। var="my_value"; echo var="${var[@]:2}"; echo "$var"পার্থক্যটা দেখ?
ভ্যালেন্টাইন বাজরামি

উত্তর:


34

এটি $@বাশ- এ বিশেষ ভেরিয়েবলের বিষয়বস্তু প্রদর্শন করছে । এটিতে সমস্ত কমান্ড লাইন যুক্তি রয়েছে এবং এই কমান্ডটি দ্বিতীয়টি থেকে সমস্ত আর্গুমেন্ট নিয়েছে এবং এগুলিকে একটি ভেরিয়েবলের মধ্যে সংরক্ষণ করছে,variable ,।

উদাহরণ

এখানে একটি উপস্থাপনা স্ক্রিপ্ট।

#!/bin/bash

echo ${@:2}

variable=${@:3}
echo $variable

উদাহরণ রান:

./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5

তথ্যসূত্র


9
নোট করুন যে কৌশলটি প্রদর্শিত আর্গুমেন্টগুলিকে একক স্ট্রিংয়ে ছড়িয়ে দিয়েছে। আপনার যদি তাদের আলাদা আর্গুমেন্ট হিসাবে রাখতে হয় তবে একটি অ্যারে ব্যবহার করুন:vars=( "${@:2}" )
গ্লেন জ্যাকম্যান

@glennjackman - এটি নির্দেশ করার জন্য ধন্যবাদ।
slm

2
কোঁকড়া বন্ধনী ব্যবহার নোট করুন। আপনার সর্বদা কোঁকড়ানো বন্ধনী ব্যবহার করার কথা, তবে প্রসঙ্গটি দ্ব্যর্থহীন হলে বাশ আপনাকে সেগুলি বাদ দিতে দেয়। অতএব, $@এবং ${@}অভিন্ন, যদিও পরবর্তীটি "আরও সঠিক" বাক্য গঠন। আপনার সাথে বন্ধনী ব্যবহার করতে হবে ${@:2}, কারণ $@:2এটি দ্ব্যর্থক এবং তাই ব্যাখ্যা করা হবে ${@}:2, যা একই জিনিস নয়।
ধানের ল্যান্ডাউ

14

এটি একটি kshবৈশিষ্ট্য bashএবং এর সাম্প্রতিক সংস্করণগুলিতেও পাওয়া যায় zsh

ইন kshএবং bash, আপনি ${array[@]:first:length}সিনট্যাক্স ব্যবহার করে একটি অ্যারের বিভিন্ন উপাদান অ্যাক্সেস করতে পারেন যা অ্যারের উপাদানগুলি length(বা সূচকগুলিতে সংখ্যায়িতভাবে সাজানো অ্যারের উপাদানগুলির তালিকায় length) অবধি প্রসারিত হয়, যা arrayদিয়ে শুরু হয় বৃহত্তর বা সমান সূচক সহ প্রথমটি first। যখন স্কেলার প্রসঙ্গে (যেমন এখানে স্কেলার ভেরিয়েবলের একটি অ্যাসাইনমেন্টে রয়েছে) উপাদানগুলির সাথে স্থানের অক্ষরের সাথে bashএবং ksh93প্রথম অক্ষরের সাথে $IFS(অথবা $IFSখালি বা স্থানটি যদি সেট না করা থাকে তবে কিছু না) যুক্ত থাকেzsh

এই ক্ষেত্রে:

$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>

$@একটি বিশেষ ক্ষেত্রে। $@অবস্থানগত পরামিতি অ্যারে আছে ( $1, $2...)। কিন্তু যখন সাথে ব্যবহার :, $0এছাড়াও অন্তর্ভুক্ত করা হয়। সুতরাং ${@:1}হিসাবে একই $@, না ${@:0}অন্য অ্যারে মত।

ইন zsh, এটি কিছুটা আলাদা। zshযোগ kshসামঞ্জস্যের জন্য শুধুমাত্র সম্প্রতি সিনট্যাক্স কিন্তু উপাদানের রেঞ্জ নির্বাচনের জন্য নিজস্ব সিনট্যাক্স হয়েছে।

পক্ষান্তরে kshএবং bash, zshঅ্যারে স্কালে ভেরিয়েবল থেকে একটি আলাদা পরিবর্তনশীল ধরনের হয়, বিক্ষিপ্ত হয় না ( zshঅন্য পরিবর্তনশীল টাইপ হিসাবে মিশুক অ্যারে আছে) এবং সূচক 1 পরিবর্তে 0 এ শুরু।

এর জন্য zsh, আপনি অ্যারের উপাদান বিন্যাসগুলি অ্যাক্সেস করে $a[first,last](যেখানে lastশেষ থেকে পিছনে গুনতে নেতিবাচকও হতে পারে)।

ইন zsh,

a[23]=a a[5]=b a[235]=c a[45]=d

235 টি উপাদান সহ একটি অ্যারে তৈরি করে, তাদের বেশিরভাগই খালি। $a[12,50]12 থেকে 50 উপাদানগুলিতে প্রসারিত হবে এবং ${a[@]:12:2}কেবল (খালি) $a[12]এবং $a[13]উপাদানগুলিতে প্রসারিত হবে । বিশেষ স্থান ধার্য, এবং আবার সঙ্গে বহনযোগ্যতা জন্য ksh93এবং bash, zshএকটি গ্রহণ 0জন্য প্রথম উপাদান $@এবং যে যেমন একইরূপে $0

সুতরাং, আপনি সমস্ত 3 টি শেল জুড়ে ${a[@]:x:n}এবং ${@:x:n}বহনযোগ্যভাবে ব্যবহার করতে পারেন , তবে কেবল অকার্যকর অ্যারেগুলির জন্য এবং আইএফএসের মানের প্রতি মনোযোগ দিন।

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