এরকম কিছু করার উপায় আছে কি?
int a = (b == 5) ? c : d;
বাশ ব্যবহার করছেন?
((...))
। শেল গাণিতিক দেখুন ।
$(( ))
এবং পাটিগণিত মূল্যায়নের সাথে কাজ করে (( ))
। এছাড়াও দেখুন https://mywiki.wooledge.org/ArithmeticExpression
।
এরকম কিছু করার উপায় আছে কি?
int a = (b == 5) ? c : d;
বাশ ব্যবহার করছেন?
((...))
। শেল গাণিতিক দেখুন ।
$(( ))
এবং পাটিগণিত মূল্যায়নের সাথে কাজ করে (( ))
। এছাড়াও দেখুন https://mywiki.wooledge.org/ArithmeticExpression
।
উত্তর:
টেরিনারি অপারেটর ? :
কেবলমাত্র স্বল্প ফর্মif/else
case "$b" in
5) a=$c ;;
*) a=$d ;;
esac
অথবা
[[ $b = 5 ]] && a="$c" || a="$d"
=
অপারেটর স্ট্রিং সমতার জন্য পরীক্ষা করে, সংখ্যার সমতা নয় (অর্থাত্ [[ 05 = 5 ]]
মিথ্যা)। আপনি যদি সংখ্যার তুলনা করতে চান তবে -eq
পরিবর্তে ব্যবহার করুন।
if/then/else
cond && op1 || op2
কনস্ট্রাক্ট একটি সহজাত বাগ আছে, যদি op1
কোন কারনের জন্য অশূন্য প্রস্থান অবস্থা হয়েছে, ফলে নীরবে হয়ে যাবে op2
। if cond; then op1; else op2; fi
খুব একটা লাইন এবং ত্রুটি নেই।
কোড:
a=$([ "$b" == 5 ] && echo "$c" || echo "$d")
echo "$c"
যদি একটি এলিয়াসেড, বহু-রেখাযুক্ত কমান্ড (পছন্দ echo 1; echo 2
) হয় তবে আপনার এটি বন্ধনীতে আবদ্ধ করা উচিত।
&&
কোনও শূন্য-বহির্গমন স্থিতি থাকবে না। অন্যথায়, সফল হলেও ব্যর্থ হলে a && b || c
"অপ্রত্যাশিতভাবে" চালানো হবে । c
a
b
শর্তটি যদি কেবল কোনও ভেরিয়েবল সেট করা আছে কিনা তা পরীক্ষা করে দেখছে তবে আরও একটি ছোট আকার রয়েছে:
a=${VAR:-20}
নির্ধারিত হবে a
এর মান VAR
যদি VAR
, সেট করা হয় অন্যথায় এটি এটি ডিফল্ট মান নির্ধারণ করবে 20
- এই এছাড়াও একটি অভিব্যক্তি ফলে হতে পারে।
মন্তব্যে অ্যালেক্স নোট হিসাবে, এই পদ্ধতির প্রযুক্তিগতভাবে "প্যারামিটার সম্প্রসারণ" বলা হয়।
a=${1:-'my-hyphenated-text'}
${VAR:-yes:-no}
।
if [ "$b" -eq 5 ]; then a="$c"; else a="$d"; fi
cond && op1 || op2
অভিব্যক্তি অন্যান্য উত্তর প্রস্তাবিত একটি সহজাত বাগ আছে, যদি op1
একটি অশূন্য প্রস্থান অবস্থা আছে, op2
চুপটি ফলাফলের হয়ে; ত্রুটিটিও -e
মোডে ধরা পড়বে না । সুতরাং, যে অভিব্যক্তি শুধুমাত্র যদি ব্যবহার করা নিরাপদ op1
ব্যর্থ না পারে (যেমন, :
, true
একটি builtin, বা কোনো কার্যকলাপ (বিভাজন এবং OS কল) মতো ব্যর্থ হতে পারে ছাড়া পরিবর্তনশীল নিয়োগ করে থাকেন)।
""
উদ্ধৃতি দ্রষ্টব্য । প্রথম জুটি $b
শূন্যস্থান বা শ্বেতস্থান থাকলে কোনও সিনট্যাক্স ত্রুটি আটকাবে । অন্যরা একক স্পেসে সমস্ত সাদা স্থান অনুবাদ করতে বাধা দেবে।
[ "x$b" -eq "x" ]
যে খালি স্ট্রিংয়ের জন্য বিশেষভাবে পরীক্ষা করা হত used আমি zsh দ্বারা ব্যবহৃত সিনট্যাক্সগুলি ব্যবহার করতে চাই (zshexpn ম্যানপেজে 'PARAMETER এক্সপেনশন') তবে আমি তাদের বহনযোগ্যতা সম্পর্কে খুব বেশি জানি না।
(( a = b==5 ? c : d )) # string + numeric
(( ))
0
a=$(( b==5 ? c : d ))
[ $b == 5 ] && { a=$c; true; } || a=$d
এটি || এর পরে অংশটি কার্যকর করা এড়াতে পারবে দুর্ঘটনাক্রমে যখন কোডটি && এবং এর মধ্যে || ব্যর্থ।
-e
মোডে ত্রুটিটি ধরবে না : (set -o errexit; [ 5 == 5 ] && { false; true; echo "success"; } || echo "failure"; echo $?; echo "further on";)
->success 0 further on
:
Bulit-ইন পরিবর্তে true
সংরক্ষণের জন্য exec
একটি বহিস্থিত প্রোগ্রাম -ing।
&&
.. ||
এবং এখনও তাদের মধ্যে একটি ব্যর্থ কমান্ড ধরছেন ?
&&
এবং ||
সংজ্ঞা অনুসারে তাদের আগে পুরো কমান্ডের জন্য প্রয়োগ করুন। সুতরাং, যদি এর আগে আপনার দুটি কমান্ড থাকে (তারা কীভাবে একত্রিত হয় তা নির্বিশেষে), আপনি এটিকে কেবল তাদের একটিতে প্রয়োগ করতে পারবেন না অন্যটিতে নয়। আপনি পতাকা ভেরিয়েবলগুলি দিয়ে / / যুক্তি অনুকরণ করতে পারেন , তবে সেখানে / / যথাযথ থাকলে কেন বিরক্ত করবেন ? if
then
else
if
then
else
এলইটি কমান্ড সমর্থন মৌলিক অপারেটরদের এক হবে অধিকাংশ:
let a=b==5?c:d;
স্বাভাবিকভাবেই, এটি কেবল ভেরিয়েবল নির্ধারণের জন্য কাজ করে; এটি অন্যান্য আদেশগুলি কার্যকর করতে পারে না।
এখানে আরেকটি বিকল্প রয়েছে যেখানে আপনাকে কেবল একবার যে ভেরিয়েবলটি বরাদ্দ করতে হবে তা নির্দিষ্ট করতে হবে এবং আপনার নির্ধারিত অংশটি স্ট্রিং বা একটি সংখ্যা কিনা তা বিবেচ্য নয়:
VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`
শুধু একটি ভাবনা. :)
[ test ]
। সুতরাং কন্সট্রাক্টটি কেবলমাত্র নিরাপদ যদি আপনি "জানেন" তবে কমান্ডটি স্টাডআউটে কিছুই আউটপুট দেয় না।
VARIABLE="`[ test ] && echo \"VALUE_A\" || echo \"VALUE_B\"`"
।
নিম্নলিখিতগুলি আমার ব্যবহারের ক্ষেত্রে কাজ করে বলে মনে হচ্ছে:
$ tern 1 YES NO
YES
$ tern 0 YES NO
NO
$ tern 52 YES NO
YES
$ tern 52 YES NO 52
NO
এবং এর মতো স্ক্রিপ্টে ব্যবহার করা যেতে পারে:
RESULT=$(tern 1 YES NO)
echo "The result is $RESULT"
function show_help()
{
echo ""
echo "usage: BOOLEAN VALUE_IF_TRUE VALUE_IF_FALSE {FALSE_VALUE}"
echo ""
echo "e.g. "
echo ""
echo "tern 1 YES NO => YES"
echo "tern 0 YES NO => NO"
echo "tern "" YES NO => NO"
echo "tern "ANY STRING THAT ISNT 1" YES NO => NO"
echo "ME=$(tern 0 YES NO) => ME contains NO"
echo ""
exit
}
if [ "$1" == "help" ]
then
show_help
fi
if [ -z "$3" ]
then
show_help
fi
# Set a default value for what is "false" -> 0
FALSE_VALUE=${4:-0}
function main
{
if [ "$1" == "$FALSE_VALUE" ]; then
echo $3
exit;
fi;
echo $2
}
main "$1" "$2" "$3"
tern
ব্যাশ অংশ? ম্যাকের কাছে এটি নেই বলে মনে হচ্ছে
chmod 700 tern
একই ফোল্ডারে চালান । এখন tern
আপনার টার্মিনালে আপনার একটি কমান্ড থাকবে
টার্নারি অপারেটরের জন্য আমরা শেল স্ক্রিপ্টিংয়ে নিম্নলিখিত তিনটি উপায় ব্যবহার করতে পারি:
[ $numVar == numVal ] && resVar="Yop" || resVar="Nop"
Or
resVar=$([ $numVar == numVal ] && echo "Yop" || echo "Nop")
Or
(( numVar == numVal ? (resVar=1) : (resVar=0) ))
বাশে টের্নারি শর্তাবলীর জন্য একটি খুব সমকালীন বাক্য গঠনও রয়েছে:
a=$(( b == 5 ? 123 : 321 ))
দুর্ভাগ্যক্রমে, এটি কেবল সংখ্যার সাথে কাজ করে - যতদূর আমি জানি।
আপনি যদি অনুরূপ বাক্য গঠন চান তবে এটি ব্যবহার করতে পারেন
a=$(( $((b==5)) ? c : d ))
a=$(((b==5) ? : c : d))
- $((...))
তখনই প্রয়োজন হয় যখন আমরা পাটিগণিতের ফলাফল অন্য ভেরিয়েবলের কাছে অর্পণ করতে চাই।
এখানে কিছু বিকল্প রয়েছে:
1- যদি অন্য এক লাইনে থাকে তবে এটি ব্যবহার সম্ভব।
if [[ "$2" == "raiz" ]] || [[ "$2" == '.' ]]; then pasta=''; else pasta="$2"; fi
2- এর মতো একটি ফাংশন লিখুন:
# Once upon a time, there was an 'iif' function in MS VB ...
function iif(){
# Echoes $2 if 1,banana,true,etc and $3 if false,null,0,''
case $1 in ''|false|FALSE|null|NULL|0) echo $3;;*) echo $2;;esac
}
ভিতরে স্ক্রিপ্ট এর মত ব্যবহার করুন
result=`iif "$expr" 'yes' 'no'`
# or even interpolating:
result=`iif "$expr" "positive" "negative, because $1 is not true"`
3- মামলার উত্তরে অনুপ্রাণিত হয়ে আরও নমনীয় এবং এক লাইনের ব্যবহার হ'ল:
case "$expr" in ''|false|FALSE|null|NULL|0) echo "no...$expr";;*) echo "yep $expr";;esac
# Expression can be something like:
expr=`expr "$var1" '>' "$var2"`
এখানে একটি সাধারণ সমাধান, এটি
সংখ্যার তুলনা সঙ্গে পরীক্ষা
a = $(if [ "$b" -eq 5 ]; then echo "$c"; else echo "$d"; fi)
স্ট্রিং তুলনা সঙ্গে পরীক্ষা
a = $(if [ "$b" = "5" ]; then echo "$c"; else echo "$d"; fi)
এটি অনেকটা ভ্লাদিমিরের সূক্ষ্ম উত্তরের মতো । যদি আপনার "টিনারারি" "যদি সত্য হয়, স্ট্রিং, যদি মিথ্যা হয়, খালি হয়" এর একটি মামলা হয়, আপনি কেবল তা করতে পারেন:
$ c="it was five"
$ b=3
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
$ b=5
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
it was five
এর উত্তর দিতে: int a = (b == 5) ? c : d;
শুধু লেখো:
b=5
c=1
d=2
let a="(b==5)?c:d"
echo $a # 1
b=6;
c=1;
d=2;
let a="(b==5)?c:d"
echo $a # 2
মনে রাখবেন যে "এক্সপ্রেশন" $ ((এক্সপ্রেশন)) এর সমান
bash
"টার্নারি অপারেটর" এর মতো কিছু রয়েছে তবে এর মধ্যেbash
"শর্তসাপেক্ষ অপারেটর" বলা হয়expr?expr:expr
(man bash
গোটো বিভাগে "গাণিতিক মূল্যায়ন" দেখুন)। মনে রাখবেনbash
"শর্তসাপেক্ষ অপারেটর" কৌতুকপূর্ণ এবং কিছু গ্যাচস রয়েছে।