.\" Automatically generated by Pandoc 3.10.2 .\" .TH "SHELLCHECK" "1" "" "ابزار تحلیل اسکریپت‌های شل" .SH "نام (NAME)" shellcheck \- ابزار تحلیل و بررسی اسکریپت‌های شل .SH "خلاصه دستور (SYNOPSIS)" \f[B]shellcheck\f[R] [\f[I]OPTIONS\f[R]...] \f[I]FILES\f[R]... .SH "توضیحات (DESCRIPTION)" ShellCheck یک ابزار تحلیل ایستا و لینتینگ (linting) برای اسکریپت‌های sh/bash است. تمرکز اصلی آن بر مدیریت خطاهای نحوی و دام‌های رایج در سطوح مبتدی و متوسط است، در شرایطی که شل تنها یک پیام خطای مبهم ارائه می‌دهد یا رفتار عجیبی از خود نشان می‌دهد؛ با این حال، برخی مشکلات پیشرفته‌تر را نیز گزارش می‌دهد که در آن‌ها حالت‌های خاص (corner cases) می‌توانند منجر به خرابی‌های دیرهنگام و مؤخر شوند. .PP ShellCheck توصیه‌های مختص به هر شل را ارائه می‌دهد. این خط را در نظر بگیرید: .IP .EX (( area = 3.14*r*r )) .EE .IP \(bu 2 برای اسکریپت‌هایی که با \f[CR]#!/bin/sh\f[R] شروع می‌شوند (یا هنگام استفاده از \f[CR]\-s sh\f[R])، ShellCheck هشدار می‌دهد که \f[CR](( .. ))\f[R] با استاندارد POSIX سازگار نیست (مشابه checkbashisms). .IP \(bu 2 برای اسکریپت‌هایی که با \f[CR]#!/bin/bash\f[R] شروع می‌شوند (یا هنگام استفاده از \f[CR]\-s bash\f[R])، ShellCheck هشدار می‌دهد که اعداد اعشاری پشتیبانی نمی‌شوند. .IP \(bu 2 برای اسکریپت‌هایی که با \f[CR]#!/bin/ksh\f[R] شروع می‌شوند (یا هنگام استفاده از \f[CR]\-s ksh\f[R])، ShellCheck هیچ هشداری نمی‌دهد، زیرا \f[CR]ksh\f[R] از اعداد اعشاری در محاسبات ریاضی پشتیبانی می‌کند. .SH "گزینه‌ها (OPTIONS)" .TP \f[B]\-a\f[R],\ \f[B]\-\-check\-sourced\f[R] هشدارها را در فایل‌های منبع‌شده (sourced) نیز صادر می‌کند. به‌طور معمول، \f[CR]shellcheck\f[R] تنها دربارهٔ مشکلات موجود در فایل‌های مشخص‌شده هشدار می‌دهد. با این گزینه، هرگونه مشکل در فایل‌های فراخوانی‌شده (sourced) نیز گزارش خواهد شد. .TP \f[B]\-C\f[R][\f[I]WHEN\f[R]],\ \f[B]\-\-color\f[R][=\f[I]WHEN\f[R]] برای خروجی TTY، رنگ‌ها را فعال می‌کند: \f[I]always\f[R] (همیشه)، \f[I]never\f[R] (هرگز) یا \f[I]auto\f[R] (خودکار). پیش‌فرض \f[I]auto\f[R] است. استفاده از \f[B]\-\-color\f[R] بدون آرگومان معادل \f[B]\-\-color=always\f[R] است. .TP \f[B]\-i\f[R]\ \f[I]CODE1\f[R][,\f[I]CODE2\f[R]...],\ \f[B]\-\-include=\f[R]\f[I]CODE1\f[R][,\f[I]CODE2\f[R]...] صرفاً کدهای مشخص‌شده را به‌طور صریح در گزارش لحاظ می‌کند. گزینه‌های \f[B]\-i\f[R] بعدی تجمعی هستند، اما همهٔ کدها را می‌توان یک‌جا به‌صورت جداشده با کاما در قالب یک آرگومان تعیین کرد. گزینه‌های لحاظ کردن (include) بر هرگونه گزینهٔ مستثنی کردن (exclude) ارائه‌شده اولویت دارند. .TP \f[B]\-e\f[R]\ \f[I]CODE1\f[R][,\f[I]CODE2\f[R]...],\ \f[B]\-\-exclude=\f[R]\f[I]CODE1\f[R][,\f[I]CODE2\f[R]...] کدهای مشخص‌شده را به‌طور صریح از گزارش مستثنی می‌کند. گزینه‌های \f[B]\-e\f[R] بعدی تجمعی هستند، اما همهٔ کدها را می‌توان یک‌جا به‌صورت جداشده با کاما در قالب یک آرگومان تعیین کرد. .TP \f[B]\-\-extended\-analysis=true/false\f[R] فعال‌سازی/غیرفعال‌سازی تحلیل جریان داده (Dataflow Analysis) جهت شناسایی مشکلات بیشتر (پیش‌فرض true). اگر هنگام بررسی اسکریپت‌هایی با چندین هزار خط کد، ShellCheck از CPU/RAM بیش از حد استفاده کند، می‌توان تحلیل گسترده را با این پرچم یا یک دستورالعمل (directive) غیرفعال کرد. این پرچم بر دستورالعمل‌ها و فایل‌های rc اولویت دارد. .TP \f[B]\-f\f[R] \f[I]FORMAT\f[R], \f[B]\-\-format=\f[R]\f[I]FORMAT\f[R] قالب خروجی shellcheck را مشخص می‌کند، که نتایج خود را در خروجی استاندارد چاپ می‌کند. گزینه‌های \f[B]\-f\f[R] بعدی نادیده گرفته می‌شوند؛ برای اطلاعات بیشتر بخش \f[B]FORMATS\f[R] را در ادامه ببینید. .TP \f[B]\-\-list\-optional\f[R] فهرستی از بررسی‌های اختیاری شناخته‌شده را در خروجی نمایش می‌دهد. این موارد را می‌توان با پرچم‌های \f[B]\-o\f[R] یا دستورالعمل‌های \f[B]enable\f[R] فعال کرد. .TP \f[B]\-\-norc\f[R] برای یافتن فایل‌های پیکربندی .shellcheckrc جستجو نمی‌کند. .TP \f[B]\-\-rcfile\f[R] \f[I]RCFILE\f[R] فایل پیکربندی مشخص‌شده را به جستجوی آن در مکان‌های پیش‌فرض ترجیح می‌دهد. .TP \f[B]\-o\f[R]\ \f[I]NAME1\f[R][,\f[I]NAME2\f[R]...],\ \f[B]\-\-enable=\f[R]\f[I]NAME1\f[R][,\f[I]NAME2\f[R]...] بررسی‌های اختیاری را فعال می‌کند. نام ویژهٔ \f[I]all\f[R] همهٔ آن‌ها را فعال می‌کند. گزینه‌های \f[B]\-o\f[R] بعدی تجمیع می‌شوند. این عمل معادل تعیین دستورالعمل‌های \f[B]enable\f[R] است. .TP \f[B]\-P\f[R]\ \f[I]SOURCEPATH\f[R],\ \f[B]\-\-source\-path=\f[R]\f[I]SOURCEPATH\f[R] مسیرهای جستجوی فایل‌های منبع‌شده (sourced) را مشخص می‌کند که در یونیکس با \f[CR]:\f[R] و در ویندوز با \f[CR];\f[R] از هم جدا می‌شوند. این عمل معادل تعیین دستورالعمل‌های \f[CR]search\-path\f[R] است. .TP \f[B]\-s\f[R]\ \f[I]shell\f[R],\ \f[B]\-\-shell=\f[R]\f[I]shell\f[R] لهجهٔ شل Bourne را مشخص می‌کند. مقادیر معتبر عبارتند از \f[I]sh\f[R]، \f[I]bash\f[R]، \f[I]dash\f[R]، \f[I]ksh\f[R] و \f[I]busybox\f[R]. حالت پیش‌فرض بر این است که شل از روی دستورالعمل \f[CR]shell\f[R] فایل، شِبانگ (shebang)، یا پسوند \f[CR].bash/.bats/.dash/.ksh\f[R] (به همین ترتیب) استنتاج شود. \f[I]sh\f[R] به \f[CR]sh\f[R] در استاندارد POSIX اشاره دارد (نه شل سیستم)، و دربارهٔ مشکلات انتقال‌پذیری و سازگاری هشدار می‌دهد. .TP \f[B]\-S\f[R]\ \f[I]SEVERITY\f[R],\ \f[B]\-\-severity=\f[R]\f[I]severity\f[R] حداقل سطح شدت (severity) خطاها را برای بررسی مشخص می‌کند. مقادیر معتبر به ترتیب شدت عبارتند از \f[I]error\f[R]، \f[I]warning\f[R]، \f[I]info\f[R] و \f[I]style\f[R]. پیش‌فرض \f[I]style\f[R] است. .TP \f[B]\-V\f[R],\ \f[B]\-\-version\f[R] اطلاعات نسخه را چاپ کرده و خارج می‌شود. .TP \f[B]\-W\f[R] \f[I]NUM\f[R],\ \f[B]\-\-wiki\-link\-count=NUM\f[R] برای خروجی TTY، تعداد \f[I]NUM\f[R] پیوند ویکی برای اطلاعات بیشتر دربارهٔ هشدارهای ذکرشده نمایش می‌دهد. برای غیرفعال کردن کامل آن‌ها، مقدار را برابر با 0 قرار دهید. .TP \f[B]\-x\f[R],\ \f[B]\-\-external\-sources\f[R] دستورهای \f[CR]source\f[R] را حتی در صورتی که فایل به عنوان ورودی مشخص نشده باشد دنبال می‌کند. به‌طور پیش‌فرض، \f[CR]shellcheck\f[R] فقط فایل‌های مشخص‌شده در خط فرمان (به‌علاوهٔ \f[CR]/dev/null\f[R]) را دنبال می‌کند. این گزینه امکان دنبال کردن هر فایلی را که اسکریپت ممکن است \f[CR]source\f[R] کند، فراهم می‌سازد. .RS .PP این گزینه را همچنین می‌توان با استفاده از \f[CR]external\-sources=true\f[R] در \f[CR].shellcheckrc\f[R] فعال کرد. این پرچم اولویت دارد. .RE .TP \f[B]FILES...\f[R] یک یا چند فایل اسکریپت جهت بررسی، یا \(dq\-\(dq برای ورودی استاندارد..SH "قالب‌ها (FORMATS)" .TP \f[B]tty\f[R] خروجی متنی ساده و خوانا برای انسان. این حالت پیش‌فرض است. .TP \f[B]gcc\f[R] خروجی سازگار با GCC. برای ویرایشگرهایی که از کامپایل و نمایش خطاهای نحوی پشتیبانی می‌کنند مفید است. .RS .PP برای مثال، در Vim، دستور \f[CR]:set makeprg=shellcheck\(rs \-f\(rs gcc\(rs %\f[R] امکان استفاده از \f[CR]:make\f[R] را برای بررسی اسکریپت، و \f[CR]:cnext\f[R] را برای پرش به خطای بعدی فراهم می‌کند. .IP .EX ::: : .EE .RE .TP \f[B]checkstyle\f[R] خروجی XML سازگار با Checkstyle. به‌صورت مستقیم یا از طریق افزونه‌ها توسط بسیاری از IDEها و سامانه‌های پایش ساخت پشتیبانی می‌شود. .RS .IP .EX ... ... .EE .RE .TP \f[B]diff\f[R] اصلاحات خودکار در قالب unified diff. می‌تواند به \f[CR]git apply\f[R] یا \f[CR]patch \-p1\f[R] لوله‌کشی (pipe) شود تا اصلاحات به‌طور خودکار اعمال گردند. .RS .IP .EX \-\-\- a/test.sh +++ b/test.sh \(at\(at \-2,6 +2,6 \(at\(at ## Example of a broken script. for f in $(ls *.m3u) do \- grep \-qi hq.*mp3 $f \(rs + grep \-qi hq.*mp3 \(dq$f\(dq \(rs && echo \-e \(aqPlaylist $f contains a HQ file in mp3 format\(aq done .EE .RE .TP \f[B]json1\f[R] فرمت Json یک قالب سریال‌سازی محبوب است که برای برنامه‌های کاربردی وب مناسب‌تر است. قالب json در ShellCheck فشرده است و تنها شامل حداقل اطلاعات لازم است. تب‌ها (Tabs) به عنوان ۱ نویسه شمارش می‌شوند. .RS .IP .EX { comments: [ { \(dqfile\(dq: \(dqfilename\(dq, \(dqline\(dq: lineNumber, \(dqcolumn\(dq: columnNumber, \(dqlevel\(dq: \(dqseveritylevel\(dq, \(dqcode\(dq: errorCode, \(dqmessage\(dq: \(dqwarning message\(dq }, ... ] } .EE .RE .TP \f[B]json\f[R] این یک نسخه قدیمی (legacy) از قالب \f[B]json1\f[R] است. یک آرایه خام از پیام‌ها (comments) است و تمامی فاصله‌ها دارای توقف تب (tab stop) به اندازه ۸ هستند. .TP \f[B]quiet\f[R] فرونشانی تمام خروجی‌های عادی. در صورتی که هیچ مشکلی یافت نشود با کد صفر خارج می‌شود، در غیر این صورت با یک خارج می‌شود. پردازش پس از یافتن نخستین مشکل متوقف می‌شود..SH "دستورالعمل‌ها (DIRECTIVES)" دستورالعمل‌های ShellCheck می‌توانند به صورت کامنت در اسکریپت شل مشخص شوند. اگر پیش از نخستین دستور قرار گیرند، در سطح سراسر فایل (file\-wide) در نظر گرفته می‌شوند. در غیر این صورت، بر روی دستور یا بلوک بلافاصله پس از خود اعمال می‌شوند: .IP .EX # shellcheck key=value key=value command\-or\-structure .EE .PP برای نمونه، برای نادیده گرفتن SC2035 درباره استفاده از \f[CR]./*.jpg\f[R]: .IP .EX # shellcheck disable=SC2035 echo \(dqFiles: \(dq *.jpg .EE .PP برای مشخص کردن محل جستجوی فایلی که در غیر این صورت به صورت پویا تعیین می‌شد در ShellCheck: .IP .EX # shellcheck source=./lib.sh source \(dq$(find_install_dir)/lib.sh\(dq .EE .PP در اینجا از یک گروه آکولاد (brace group) شل برای نادیده گرفتن یک هشدار در چندین خط استفاده شده است: .IP .EX # shellcheck disable=SC2016 { echo \(aqModifying $PATH\(aq echo \(aqPATH=foo:$PATH\(aq >> \(ti/.bashrc } .EE .PP کلیدهای معتبر عبارتند از: .TP \f[B]disable\f[R] فهرستی از کدهای خطای جدا شده با کاما را برای دستور بعدی غیرفعال می‌کند. این دستور می‌تواند یک دستور ساده مانند \f[CR]echo foo\f[R] یا یک دستور مرکب مانند تعریف تابع، بلوک subshell یا حلقه باشد. یک بازه را می‌توان با خط تیره مشخص کرد، مانند \f[CR]disable=SC3000\-SC4000\f[R] برای مستثنی کردن 3xxx. همه هشدارها را می‌توان با \f[CR]disable=all\f[R] غیرفعال کرد. .TP \f[B]enable\f[R] یک بررسی اختیاری را با نام، همان‌گونه که با \f[B]\-\-list\-optional\f[R] فهرست شده است، فعال می‌کند. تنها دستورالعمل‌های \f[CR]enable\f[R] در سطح کل فایل در نظر گرفته می‌شوند. .TP \f[B]extended\-analysis\f[R] تنظیم روی true/false برای فعال/غیرفعال کردن تحلیل جریان داده (dataflow analysis). مشخص کردن \f[CR]# shellcheck extended\-analysis=false\f[R] در اسکریپت‌های بزرگِ به طور خودکار تولیدشده (بیش از ۲۰۰۰ خط)، مصرف منابع ShellCheck را به بهای صرف‌نظر از برخی بررسی‌ها کاهش می‌دهد. تحلیل گسترده به طور پیش‌فرض فعال است. .TP \f[B]external\-sources\f[R] تنظیم روی \f[CR]true\f[R] در \f[CR].shellcheckrc\f[R] تا به ShellCheck همیشه اجازه داده شود فایل‌های دلخواه را از عبارات \(aqsource\(aq باز کند (همان روشی که بیشتر ابزارها عمل می‌کنند). .RS این گزینه تنها به دلیل پیشینه ShellCheck به عنوان یک سرویس از راه دور برای بررسی اسکریپت‌های غیرقابل اعتماد، به طور پیش‌فرض روی \f[CR]false\f[R] است. می‌توان آن را با خیال راحت برای فرایند توسعه عادی فعال کرد. .RE .TP \f[B]source\f[R] نام فایل واردشده توسط عبارت \f[CR]source\f[R]/\f[CR].\f[R] را بازنویسی می‌کند. از این گزینه می‌توان برای تعیین محل فایلی که نامش در زمان اجرا مشخص می‌شود استفاده کرد، یا با هدایت آن به استفاده از \f[CR]/dev/null\f[R]، از یک فراخوانی منبع صرف‌نظر کرد. .TP \f[B]source\-path\f[R] یک دایرکتوری را به مسیر جستجو برای عبارات \f[CR]source\f[R]/\f[CR].\f[R] اضافه می‌کند (به طور پیش‌فرض، فقط دایرکتوری کاری ShellCheck در نظر گرفته می‌شود). مسیرهای مطلق نیز بر مبنای این مسیرها ریشه‌بندی خواهند شد. مسیر ویژه \f[CR]SCRIPTDIR\f[R] می‌تواند برای تعیین دایرکتوری اسکریپت در حال بررسی استفاده شود، مانند \f[CR]source\-path=SCRIPTDIR\f[R] یا \f[CR]source\-path=SCRIPTDIR/../libs\f[R]. مسیرهای متعدد با یکدیگر تجمیع می‌شوند و \f[CR]\-P\f[R] نسبت به آن‌ها تقدم دارد. .TP \f[B]shell\f[R] شل شناسایی‌شده از shebang را بازنویسی می‌کند. این گزینه برای فایل‌هایی که قرار است فراخوانی شوند (و در نتیجه فاقد shebang هستند)، یا احتمالاً به عنوان یک جایگزین هدفمندتر برای \(aqdisable=SC2039\(aq، مفید است..SH "فایل‌های پیکربندی (RC FILES)" مگر اینکه از \f[CR]\-\-norc\f[R] استفاده شود، ShellCheck به دنبال فایلی به نام \f[CR].shellcheckrc\f[R] یا \f[CR]shellcheckrc\f[R] در دایرکتوری اسکریپت و تک‌تک دایرکتوری‌های والد آن خواهد گشت. در صورت یافتن، جفت‌های \f[CR]key=value\f[R] را از آن خوانده و با آن‌ها به‌عنوان دستورالعمل‌های سراسری برای کل فایل رفتار خواهد کرد. .PP در اینجا نمونه‌ای از \f[CR].shellcheckrc\f[R] آورده شده است: .IP .EX # Look for \(aqsource\(aqd files relative to the checked script, # and also look for absolute paths in /mnt/chroot source\-path=SCRIPTDIR source\-path=/mnt/chroot # Since 0.9.0, values can be quoted with \(aq\(aq or \(dq\(dq to allow spaces source\-path=\(dqMy Documents/scripts\(dq # Allow opening any \(aqsource\(aqd file, even if not specified as input external\-sources=true # Turn on warnings for unquoted variables with safe values enable=quote\-safe\-variables # Turn on warnings for unassigned uppercase variables enable=check\-unassigned\-uppercase # Allow [ ! \-z foo ] instead of suggesting \-n disable=SC2236 .EE .PP اگر هیچ \f[CR].shellcheckrc\f[R]ی در هیچ‌یک از دایرکتوری‌های والد پیدا نشود، ShellCheck به دنبال \f[CR]\(ti/.shellcheckrc\f[R] و در ادامه \f[CR]$XDG_CONFIG_HOME\f[R] (معمولاً \f[CR]\(ti/.config/shellcheckrc\f[R]) در یونیکس، یا \f[CR]%APPDATA%/shellcheckrc\f[R] در ویندوز خواهد گشت. تنها نخستین فایلِ یافت‌شده استفاده خواهد شد. .PP نکته برای کاربران Snap: محیط ایزوله (Sandbox) اسنپ اجازه دسترسی به فایل‌های پنهان را نمی‌دهد. به جای آن از \f[CR]shellcheckrc\f[R] بدون نقطه استفاده کنید. .PP نکته برای کاربران Docker: نرم‌افزار ShellCheck تنها قادر است به دنبال فایل‌هایی بگردد که در کانتینر سوار (mount) شده‌اند، بنابراین \f[CR]\(ti/.shellcheckrc\f[R] خوانده نخواهد شد. .SH "متغیرهای محیطی (ENVIRONMENT VARIABLES)" متغیر محیطی \f[CR]SHELLCHECK_OPTS\f[R] می‌تواند با پرچم‌های پیش‌فرض تنظیم شود: .IP .EX export SHELLCHECK_OPTS=\(aq\-\-shell=bash \-\-exclude=SC2016\(aq .EE .PP مقدار آن بر اساس فاصله‌ها تفکیک شده و در هر بار فراخوانی، به ابتدای خط فرمان اضافه خواهد شد. .SH "مقادیر بازگشتی (RETURN VALUES)" ابزار ShellCheck از کدهای خروج زیر استفاده می‌کند: .IP \(bu 2 0: تمامی فایل‌ها با موفقیت و بدون هیچ مشکلی پویش شدند. .IP \(bu 2 1: تمامی فایل‌ها با موفقیت پویش شدند، اما مشکلاتی وجود داشت. .IP \(bu 2 2: برخی از فایل‌ها قابل پردازش نبودند (برای نمونه، فایل پیدا نشد). .IP \(bu 2 3: برنامه ShellCheck با نحو نادرست فراخوانی شد (برای نمونه، پرچم ناشناخته). .IP \(bu 2 4: برنامه ShellCheck با گزینه‌های نادرست فراخوانی شد (برای نمونه، فرمتر ناشناخته). .SH "محلی‌سازی (LOCALE)" این نگارش از ShellCheck تنها به زبان انگلیسی موجود است. تمامی فایل‌ها با تساهل به صورت UTF\-8 رمزگشایی می‌شوند و در صورت وجود توالی‌های نامعتبر، از ISO\-8859\-1 به عنوان جایگزین استفاده می‌شود. متغیر \f[CR]LC_CTYPE\f[R] برای خروجی لحاظ می‌شود و برای لوکال‌هایی که کدگذاری در آن‌ها نامشخص است (مانند لوکال \f[CR]C\f[R])، پیش‌فرض روی UTF\-8 است. .PP کاربران ویندوز که خطای \f[CR]commitBuffer: invalid argument (invalid character)\f[R] را مشاهده می‌کنند، باید ترمینال خود را با دستور \f[CR]chcp 65001\f[R] برای استفاده از UTF\-8 تنظیم کنند. .SH "ناسازگاری‌های شناخته‌شده (KNOWN INCOMPATIBILITIES)" (اگر مطالب این بخش نامفهوم به نظر می‌رسند، به احتمال زیاد تحت تأثیر آن قرار نخواهید گرفت) .PP برای جلوگیری از پیشنهادهای گیج‌کننده و نادرست، ShellCheck الزام می‌کند که بدنه توابع یا \f[CR]{ brace groups; }\f[R] باشند یا \f[CR]( subshells )\f[R]، و نام‌های توابعی که شامل \f[CR][]*=!\f[R] هستند تنها پس از کلیدواژه \f[CR]function\f[R] شناخته می‌شوند. .PP تعریف‌های غیرمتعارف زیر برای توابع در Bash یکسان هستند، اما ShellCheck تنها دومی را به رسمیت می‌شناسد. .IP .EX [x!=y] () [[ $1 ]] function [x!=y] () { [[ $1 ]]; } .EE .PP پوسته‌های فاقد کلیدواژه \f[CR]function\f[R] از ابتدا اجازه استفاده از این نویسه‌ها را در نام توابع نمی‌دهند. نام‌های توابعی که شامل \f[CR]{}\f[R] باشند به‌هیچ‌وجه پشتیبانی نمی‌شوند. .PP افزون بر این، اگر ShellCheck عبارت \f[CR][x!=y]\f[R] را ببیند، فرض خواهد کرد که این یک مقایسه نامعتبر است. برای فراخوانی تابع بالا، دستور را مانند \f[CR]\(aq[x!=y]\(aq\f[R] نقل‌قول کنید، یا برای حفظ همان رفتار تطبیق الگو (globbing)، از \f[CR]command [x!=y]\f[R] استفاده نمایید. .PP ابزار ShellCheck محدودیت‌های بیشتری را بر دستور \f[CR][\f[R] اعمال می‌کند تا به عیب‌یابی موارد استفاده نامعتبر و رایج کمک کند. اگرچه \f[CR][ $x= 1 ]\f[R] در استاندارد POSIX تعریف شده است، ShellCheck فرض خواهد کرد که مقصود، مقایسه بسیار محتمل‌ترِ \f[CR][ \(dq$x\(dq = 1 ]\f[R] بوده و بر این اساس با خطا متوقف می‌شود. برای کاربردهای غیرمعمول یا پویای دستور \f[CR][\f[R]، به جای آن از \f[CR]test\f[R] یا \f[CR]\(rs[\f[R] استفاده کنید..SH "گزارش باگ‌ها (REPORTING BUGS)" باگ‌ها و مشکلات را می‌توان در GitHub گزارش کرد: .PP https://github.com/koalaman/shellcheck/issues .SH "نویسندگان (AUTHORS)" ShellCheck توسط Vidar Holen و با یاری فهرستی طولانی از مشارکت‌کنندگان فوق‌العاده توسعه یافته و نگهداری می‌شود. .SH "کپی‌رایت و تکثیر (COPYRIGHT)" کپی‌رایت 2012\-2025، Vidar Holen و مشارکت‌کنندگان. تحت مجوز GNU General Public License نسخه 3 یا بالاتر، ببینید: https://gnu.org/licenses/gpl.html .SH "همچنین ببینید (SEE ALSO)" sh(1), bash(1), dash(1), ksh(1)