বাস্তবায়নের আরও ভাল উপায় কী print_last_arg
?
#!/bin/sh
print_last_arg () {
eval "echo \${$#}" # this hurts
}
print_last_arg foo bar baz
# baz
(যদি এটি হয় তবে বলুন #!/usr/bin/zsh
পরিবর্তে #!/bin/sh
আমি কী করণীয় তা জানতাম My আমার সমস্যাটি এর বাস্তবায়নের জন্য যুক্তিসঙ্গত উপায় খুঁজে পাচ্ছে #!/bin/sh
))
সম্পাদনা: উপরেরটি কেবল একটি নির্বোধ উদাহরণ। আমার লক্ষ্যটি সর্বশেষ যুক্তি মুদ্রণ করা নয় , বরং শেল ফাংশনটির মধ্যে সর্বশেষ যুক্তিটি উল্লেখ করার উপায় রয়েছে।
সম্পাদনা 2: আমি এ জাতীয় অস্পষ্টভাবে কথিত প্রশ্নের জন্য ক্ষমা চাইছি। আমি এই মুহূর্তে এটি পেতে আশা করি।
যদি এটির /bin/zsh
পরিবর্তে থাকত তবে /bin/sh
আমি এই জাতীয় কিছু লিখতে পারি
#!/bin/zsh
print_last_arg () {
local last_arg=$argv[$#]
echo $last_arg
}
শেল ফাংশনটির মধ্যে সর্বশেষ যুক্তিটি উল্লেখ করার উপায়$argv[$#]
হিসাবে আমি আমার প্রথম EDIT এ যা বর্ণনা করেছি তার একটি অভিব্যক্তি উদাহরণ ।
অতএব, আমার সত্যিকার অর্থে আমার মূল উদাহরণটি লেখা উচিত ছিল:
print_last_arg () {
local last_arg=$(eval "echo \${$#}") # but this hurts even more
echo $last_arg
}
... এটি স্পষ্ট করে তুলতে যে আমি যা করছি তার পরে অ্যাসাইনমেন্টের ডানদিকে রাখা কম ভয়াবহ বিষয়।
তবে নোট করুন, সমস্ত উদাহরণে সর্বশেষ যুক্তিটি অ-ধ্বংসাত্মকভাবে অ্যাক্সেস করা হয়েছে । আইওডাব্লু, শেষ যুক্তির অ্যাক্সেস স্থিতিগত আর্গুমেন্টকে পুরো অকার্যকর করে ফেলে।
var=$( eval echo \${$#})
থেকে eval var=\${$#}
- দুই একইভাবে কিছু না।
shift
এবং set -- ...
ভিত্তিক সমাধানগুলি ক্ষতিকারক হতে পারে যদি না সেগুলি যেখানে ক্ষতিকারক হয় সেখানে ব্যবহার না করা।
eval "var=\${$#}"
এটির গ্যারান্টিযুক্ত নিরাপদ মান var=${arr[evaled index]}
ব্যতীত তুলনা করার সময় করার ক্ষেত্রে আলাদাভাবে কিছুই নেই nothing $#
পুরো সেটটি অনুলিপি করুন কেন তখন এটি নষ্ট করবেন যখন আপনি কেবল এটি সরাসরি সূচক করতে পারেন?