اولویت عملگر

فصل 8. عملکردها و مباحث مربوط

‎8.4‎- اولویت عملگر

در یک اسکریپت،عملیات به ترتیب اولویت انجام می‌شوند: عملیات دارای تقدم بالاتر، قبل از آنها که اولویت پایین‌تری دارند، انجام می‌شوند. [1]

جدول ‎8-1‎. اولویت عملگر

عملگر معنی توضیحات
بالاترین اولویت  
var++ var-- پس افزایش، پس کاهش عملگرهای سبکِ C
++var --var پیش افزایش، پیش کاهش  
     
! ~ نفی منطقی - بیتی، معنی عملگر پس از خود را برعکس می‌سازد
     
** توان رساندن عملیات حسابی
% / * ضرب، تقسیم، باقیمانده عملیات حسابی
+ - تفریق، جمع عملیات حسابی
     
<< >> انتقال به راست و چپ بیتی
     
-z -n مقایسه یگانی رشته هست/نیست null
-e -f -t -x, etc. مقایسه یگانی تست-فایل
< -lt > -gt <= -le >= -ge مقایسه مرکب رشته و عدد صحیح
-nt -ot -ef مقایسه مرکب تست-فایل
== -eq != -ne برابری / نابرابری عملگرهای بررسی رشته و عدد صحیح
     
& AND بیتی
^ XOR OR بیتیانحصاری
| OR بیتی
     
‎&& -a‎ and مقایسه مرکب، منطقی
‎|| -o‎ or مقایسه مرکب، منطقی
     
‎?:‎ عملگر سه‌گانه سبکِ C
= تخصیص (با عملگر برابری test اشتباه نکنید)
‎*= /= %= += -= <<= >>= &=‎ تخصیص ترکیبی مساوی-ضربدر، مساوی-تقسیم‌بر، مساوی-باقیمانده، و غیره.
     
, comma تعدادی عملگر را بهم پیوند می‌دهد
پایین‌ترین اولویت  

در عمل، تمام آنچه واقعاً لازم است شما به خاطر بسپارید، از این قرار است:

  • آهنگ "My Dear Aunt Sally" ‏(multiply, divide, add, subtract)‏ برای عملیات حساب خودمان.(مترجم: روشی برای به خاطر سپردن فهرستی از اقلام است. در اینجا برای به خاطر سپردن ترتیب اولویت عملگرها، ارتباطی میان حروف اول نام عملگرها و موقعیت کلماتی درعنوان آهنگ که با همان حرف شروع می‌شوند برقرار گردیده است. به عنوان مثال عملگر divide با کلمه Dear که هردو با حرف d شروع می‌شوند و در جایگاه دوم قرار دارند.)

  • عملگرهای منطقی مرکب، &&‏، ||‏، ‎-a‎، و ‎-o‎ دارای اولویت پایین هستند.

  • ترتیب ارزیابی عملگرهای دارای اولویت برابر، به طور معمول از چپ به راست است.

اکنون، بیایید از آگاهی خودمان در مورد تقدم عملگر برای تحلیل دو سطر از فایل ‎/etc/init.d/functions‎ ، به طوریکه در توزیع لینوکس Fedora Core یافت می‌شود، بهره‌برداری کنیم.

while [ -n "$remaining" -a "$retry" -gt 0 ]; do

#


#                           
while [ -n "$remaining" -a "$retry" -gt 0 ]; do
#    

# 
#+
#+
#+ 
#+
#
# 
#+
#+


#

if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" ] ; then


#
if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" ] ; then
#

#
#+
#+
#+
#+
#
#
#+
#
#
#
#
#  

Tip

برای پرهیز از آشفتگی یا خطا در یک رشته پیچیده ازعملگرهای تست، رشته را به بخش‌هایی که داخل براکت‌ها قرار داده می‌شوند تجزیه کنید.

if [ "$v1" -gt "$v2"  -o  "$v1" -lt "$v2"  -a  -e "$filename" ]
#

if [[ "$v1" -gt "$v2" ]] || [[ "$v1" -lt "$v2" ]] && [[ -e "$filename" ]]
#

یادداشت‌ها

[1]

اولویت، در این مضمون، تقریباً دارای همان معنای حق تقدم است.