mirror of
https://github.com/rawiriblundell/wiki.bash-hackers.org
synced 2024-12-24 13:50:39 +01:00
522 lines
32 KiB
Plaintext
522 lines
32 KiB
Plaintext
|
<!DOCTYPE html>
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" dir="ltr" class="no-js">
|
||
|
<head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=TPXmWR5s" charset="utf-8"></script>
|
||
|
<script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script>
|
||
|
<script type="text/javascript">
|
||
|
__wm.init("http://web.archive.org/web");
|
||
|
__wm.wombat("https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=edit","20221206151450","http://web.archive.org/","web","/_static/",
|
||
|
"1670339690");
|
||
|
</script>
|
||
|
<link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" />
|
||
|
<link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=qtvMKcIJ" />
|
||
|
<!-- End Wayback Rewrite JS Include -->
|
||
|
|
||
|
<meta charset="UTF-8"/>
|
||
|
<title>The C-style for-loop [Bash Hackers Wiki]</title>
|
||
|
<script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
|
||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||
|
<link rel="shortcut icon" href="/web/20221206151450im_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/images/favicon.ico"/>
|
||
|
<link rel="apple-touch-icon" href="/web/20221206151450im_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/images/apple-touch-icon.png"/>
|
||
|
<meta name="generator" content="DokuWiki"/>
|
||
|
<meta name="robots" content="noindex,nofollow"/>
|
||
|
<link type="text/css" rel="stylesheet" href="/web/20221206151450cs_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/assets/bootstrap/default/bootstrap.min.css"/>
|
||
|
<link rel="search" type="application/opensearchdescription+xml" href="/web/20221206151450/https://wiki.bash-hackers.org/lib/exe/opensearch.php" title="Bash Hackers Wiki"/>
|
||
|
<link rel="start" href="/"/>
|
||
|
<link rel="contents" href="/syntax/ccmd/c_for?do=index" title="Sitemap"/>
|
||
|
<link rel="manifest" href="/web/20221206151450/https://wiki.bash-hackers.org/lib/exe/manifest.php"/>
|
||
|
<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/web/20221206151450/https://wiki.bash-hackers.org/feed.php"/>
|
||
|
<link rel="alternate" type="application/rss+xml" title="Current namespace" href="/web/20221206151450/https://wiki.bash-hackers.org/feed.php?mode=list&ns=syntax:ccmd"/>
|
||
|
<link rel="alternate" type="text/html" title="Plain HTML" href="/web/20221206151450/https://wiki.bash-hackers.org/_export/xhtml/syntax/ccmd/c_for"/>
|
||
|
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/web/20221206151450/https://wiki.bash-hackers.org/_export/raw/syntax/ccmd/c_for"/>
|
||
|
<link rel="stylesheet" type="text/css" href="/web/20221206151450cs_/https://wiki.bash-hackers.org/lib/exe/css.php?t=bootstrap3&tseed=54923c3deda180f2db5bd755cd8fbf1a"/>
|
||
|
<!--[if gte IE 9]><!-->
|
||
|
<script type="text/javascript">/*<![CDATA[*/var NS='syntax:ccmd';var JSINFO = {"updatable":1,"userreplace":1,"default_macro_string":"","plugins":{"edittable":{"default columnwidth":""}},"move_renameokay":false,"isadmin":0,"isauth":0,"bootstrap3":{"mode":"source","toc":[],"config":{"collapsibleSections":0,"fixedTopNavbar":1,"showSemanticPopup":0,"sidebarOnNavbar":0,"tagsOnTop":1,"tocAffix":1,"tocCollapseOnScroll":1,"tocCollapsed":0,"tocLayout":"default","useAnchorJS":1,"useAlternativeToolbarIcons":1}},"id":"syntax:ccmd:c_for","namespace":"syntax:ccmd","ACT":"source","useHeadingNavigation":1,"useHeadingContent":1};
|
||
|
/*!]]>*/</script>
|
||
|
<script type="text/javascript" charset="utf-8" src="/web/20221206151450js_/https://wiki.bash-hackers.org/lib/exe/jquery.php?tseed=23f888679b4f1dc26eef34902aca964f"></script>
|
||
|
<script type="text/javascript" charset="utf-8" src="/web/20221206151450js_/https://wiki.bash-hackers.org/lib/exe/js.php?t=bootstrap3&tseed=54923c3deda180f2db5bd755cd8fbf1a"></script>
|
||
|
<script type="text/javascript">/*<![CDATA[*/if (typeof IconifyConfig == 'undefined') { var IconifyConfig = { 'defaultAPI' : '/lib/tpl/bootstrap3/iconify.php?prefix={prefix}&icons={icons}' } }
|
||
|
/*!]]>*/</script>
|
||
|
<script type="text/javascript" src="/web/20221206151450js_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/assets/bootstrap/js/bootstrap.min.js"></script>
|
||
|
<script type="text/javascript" src="/web/20221206151450js_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/assets/anchorjs/anchor.min.js"></script>
|
||
|
<script type="text/javascript" src="/web/20221206151450js_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/assets/typeahead/bootstrap3-typeahead.min.js"></script>
|
||
|
<script type="text/javascript" src="/web/20221206151450js_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/assets/iconify/iconify.min.js"></script>
|
||
|
<script type="text/javascript" src="/web/20221206151450js_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/assets/iconify/plugins/fa.js"></script>
|
||
|
<!--<![endif]-->
|
||
|
<style type="text/css">@media screen { body { margin-top: 65px; } #dw__toc.affix { top: 55px; position: fixed !important; } #dw__toc .nav .nav .nav { display: none; } }</style>
|
||
|
<!--[if lt IE 9]>
|
||
|
<script type="text/javascript" src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
||
|
<script type="text/javascript" src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||
|
<![endif]-->
|
||
|
</head>
|
||
|
<body class="default dokuwiki mode_source tpl_bootstrap3 dw-page-on-panel dw-fluid-container" data-page-id="syntax:ccmd:c_for"><div class="dokuwiki">
|
||
|
<header id="dokuwiki__header" class="dw-container dokuwiki container-fluid mx-5">
|
||
|
<!-- navbar -->
|
||
|
<nav id="dw__navbar" class="navbar navbar-fixed-top navbar-default" role="navigation">
|
||
|
|
||
|
<div class="dw-container container-fluid mx-5">
|
||
|
|
||
|
<div class="navbar-header">
|
||
|
|
||
|
<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".navbar-collapse">
|
||
|
<span class="icon-bar"></span>
|
||
|
<span class="icon-bar"></span>
|
||
|
<span class="icon-bar"></span>
|
||
|
</button>
|
||
|
|
||
|
<a class="navbar-brand d-flex align-items-center" href="/web/20221206151450/https://wiki.bash-hackers.org/start" accesskey="h" title="Bash Hackers Wiki"><img id="dw__logo" class="pull-left h-100 mr-4" alt="Bash Hackers Wiki" src="/web/20221206151450im_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/images/logo.png"/><div class="pull-right"><div id="dw__title">Bash Hackers Wiki</div></div></a>
|
||
|
</div>
|
||
|
|
||
|
<div class="collapse navbar-collapse">
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<div class="navbar-right" id="dw__navbar_items">
|
||
|
|
||
|
|
||
|
<!-- navbar-searchform -->
|
||
|
<form action="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for" accept-charset="utf-8" class="navbar-form navbar-left search" id="dw__search" method="get" role="search">
|
||
|
<div class="input-group">
|
||
|
<input id="qsearch" autocomplete="off" type="search" placeholder="Search" value="" accesskey="f" name="q" class="form-control" title="[F]"/>
|
||
|
<div class="input-group-btn">
|
||
|
<button class="btn btn-default" type="submit" title="Search">
|
||
|
<span class="iconify" data-icon="mdi:magnify"></span> </button>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
<input type="hidden" name="do" value="search"/>
|
||
|
</form>
|
||
|
<!-- /navbar-searchform -->
|
||
|
<!-- tools-menu -->
|
||
|
<ul class="nav navbar-nav dw-action-icon" id="dw__tools">
|
||
|
|
||
|
|
||
|
<li class="dropdown">
|
||
|
|
||
|
<a href="" class="dropdown-toggle" data-target="#" data-toggle="dropdown" title="" role="button" aria-haspopup="true" aria-expanded="false">
|
||
|
<span class="iconify" data-icon="mdi:wrench"></span> <span class="hidden-lg hidden-md hidden-sm">Tools</span> <span class="caret"></span>
|
||
|
</a>
|
||
|
|
||
|
<ul class="dropdown-menu tools" role="menu">
|
||
|
|
||
|
<li class="dropdown-header">
|
||
|
<span class="iconify" data-icon="mdi:account"></span> User Tools </li>
|
||
|
|
||
|
<li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=register" title="Register" rel="nofollow" class="menuitem register"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M15 14c-2.67 0-8 1.33-8 4v2h16v-2c0-2.67-5.33-4-8-4m-9-4V7H4v3H1v2h3v3h2v-3h3v-2m6 2a4 4 0 0 0 4-4 4 4 0 0 0-4-4 4 4 0 0 0-4 4 4 4 0 0 0 4 4z"/></svg><span>Register</span></a></li><li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=login&sectok=" title="Log In" rel="nofollow" class="menuitem login"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M10 17.25V14H3v-4h7V6.75L15.25 12 10 17.25M8 2h9a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-4h2v4h9V4H8v4H6V4a2 2 0 0 1 2-2z"/></svg><span>Log In</span></a></li>
|
||
|
<li class="divider" role="separator"></li>
|
||
|
|
||
|
|
||
|
<li class="dropdown-header">
|
||
|
<span class="iconify" data-icon="mdi:toolbox"></span> Site Tools </li>
|
||
|
|
||
|
<li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=recent" title="Recent Changes [r]" rel="nofollow" accesskey="r" class="menuitem recent"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M15 13h1.5v2.82l2.44 1.41-.75 1.3L15 16.69V13m4-5H5v11h4.67c-.43-.91-.67-1.93-.67-3a7 7 0 0 1 7-7c1.07 0 2.09.24 3 .67V8M5 21a2 2 0 0 1-2-2V5c0-1.11.89-2 2-2h1V1h2v2h8V1h2v2h1a2 2 0 0 1 2 2v6.1c1.24 1.26 2 2.99 2 4.9a7 7 0 0 1-7 7c-1.91 0-3.64-.76-4.9-2H5m11-9.85A4.85 4.85 0 0 0 11.15 16c0 2.68 2.17 4.85 4.85 4.85A4.85 4.85 0 0 0 20.85 16c0-2.68-2.17-4.85-4.85-4.85z"/></svg><span>Recent Changes</span></a></li><li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=media&ns=syntax%3Accmd" title="Media Manager" rel="nofollow" class="menuitem media"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M7 15l4.5-6 3.5 4.5 2.5-3L21 15m1-11h-8l-2-2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M2 6H0v14a2 2 0 0 0 2 2h18v-2H2V6z"/></svg><span>Media Manager</span></a></li><li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=index" title="Sitemap [x]" rel="nofollow" accesskey="x" class="menuitem index"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M3 3h6v4H3V3m12 7h6v4h-6v-4m0 7h6v4h-6v-4m-2-4H7v5h6v2H5V9h2v2h6v2z"/></svg><span>Sitemap</span></a></li>
|
||
|
<li class="divider" role="separator"></li>
|
||
|
|
||
|
|
||
|
<li class="dropdown-header">
|
||
|
<span class="iconify" data-icon="mdi:file-document-outline"></span> Page Tools </li>
|
||
|
|
||
|
<li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=" title="Show page [v]" rel="nofollow" accesskey="v" class="menuitem show"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M13 9h5.5L13 3.5V9M6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m9 16v-2H6v2h9m3-4v-2H6v2h12z"/></svg><span>Show page</span></a></li><li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=revisions" title="Old revisions [o]" rel="nofollow" accesskey="o" class="menuitem revs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M11 7v5.11l4.71 2.79.79-1.28-4-2.37V7m0-5C8.97 2 5.91 3.92 4.27 6.77L2 4.5V11h6.5L5.75 8.25C6.96 5.73 9.5 4 12.5 4a7.5 7.5 0 0 1 7.5 7.5 7.5 7.5 0 0 1-7.5 7.5c-3.27 0-6.03-2.09-7.06-5h-2.1c1.1 4.03 4.77 7 9.16 7 5.24 0 9.5-4.25 9.5-9.5A9.5 9.5 0 0 0 12.5 2z"/></svg><span>Old revisions</span></a></li><li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=backlink" title="Backlinks" rel="nofollow" class="menuitem backlink"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z"/></svg><span>Backlinks</span></a></li><li class="action"><a href="#dokuwiki__top" title="Back to top [t]" rel="nofollow" accesskey="t" class="menuitem top"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"/></svg><span>Back to top</span></a></li>
|
||
|
|
||
|
</ul>
|
||
|
</li>
|
||
|
|
||
|
|
||
|
</ul>
|
||
|
<!-- /tools-menu -->
|
||
|
|
||
|
<ul class="nav navbar-nav">
|
||
|
|
||
|
|
||
|
<li>
|
||
|
<span class="dw__actions dw-action-icon">
|
||
|
<a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=register" title="Register" rel="nofollow" class="menuitem register btn btn-success navbar-btn"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M15 14c-2.67 0-8 1.33-8 4v2h16v-2c0-2.67-5.33-4-8-4m-9-4V7H4v3H1v2h3v3h2v-3h3v-2m6 2a4 4 0 0 0 4-4 4 4 0 0 0-4-4 4 4 0 0 0-4 4 4 4 0 0 0 4 4z"/></svg><span class=""> Register</span></a><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=login&sectok=" title="Log In" rel="nofollow" class="menuitem login btn btn-default navbar-btn"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M10 17.25V14H3v-4h7V6.75L15.25 12 10 17.25M8 2h9a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-4h2v4h9V4H8v4H6V4a2 2 0 0 1 2-2z"/></svg><span class=""> Log In</span></a> </span>
|
||
|
</li>
|
||
|
|
||
|
</ul>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
</nav>
|
||
|
<!-- navbar -->
|
||
|
<div align="center">
|
||
|
<script async src="//web.archive.org/web/20221206151450js_/https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
||
|
<!-- BHORG_BOTTOM -->
|
||
|
<ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-4658830517838678" data-ad-slot="1603598940"></ins>
|
||
|
<script>
|
||
|
(adsbygoogle = window.adsbygoogle || []).push({});
|
||
|
</script>
|
||
|
</div>
|
||
|
|
||
|
</header>
|
||
|
|
||
|
<a name="dokuwiki__top" id="dokuwiki__top"></a>
|
||
|
|
||
|
<main role="main" class="dw-container pb-5 dokuwiki container-fluid mx-5">
|
||
|
|
||
|
<div id="dokuwiki__pageheader">
|
||
|
|
||
|
|
||
|
<!-- breadcrumbs -->
|
||
|
<nav id="dw__breadcrumbs" class="small">
|
||
|
|
||
|
<hr/>
|
||
|
|
||
|
<div class="dw__youarehere">
|
||
|
<ol class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li>You are here</li><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="/web/20221206151450/https://wiki.bash-hackers.org/start" itemprop="item" title="start"><span itemprop="name"><span class="iconify" data-icon="mdi:home"></span></span></a></li><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/start" class="wikilink1" title="syntax:start">Syntax</a></li><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/start" class="wikilink1" title="syntax:ccmd:start">Compound Commands</a></li><li class="active" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name"><a itemprop="item" href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for" class="wikilink1" title="syntax:ccmd:c_for">The C-style for-loop</a></span></li></ol> </div>
|
||
|
|
||
|
<div class="dw__breadcrumbs hidden-print">
|
||
|
<ol class="breadcrumb"><li>Trace</li> </div>
|
||
|
|
||
|
<hr/>
|
||
|
|
||
|
</nav>
|
||
|
<!-- /breadcrumbs -->
|
||
|
|
||
|
<p class="text-right">
|
||
|
<span class="pageId ml-1 label label-primary">syntax:ccmd:c_for</span> </p>
|
||
|
|
||
|
<div id="dw__msgarea" class="small">
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
<div class="row">
|
||
|
|
||
|
|
||
|
<article id="dokuwiki__content" class="col-sm-12 col-md-12 " itemscope itemtype="http://schema.org/Article" itemref="dw__license">
|
||
|
|
||
|
|
||
|
<!-- page-tools -->
|
||
|
<nav id="dw__pagetools" class="hidden-print">
|
||
|
<div class="tools panel panel-default">
|
||
|
<ul class="nav nav-stacked nav-pills text-muted">
|
||
|
<li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=" title="Show page [v]" rel="nofollow" accesskey="v" class="menuitem show"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M13 9h5.5L13 3.5V9M6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m9 16v-2H6v2h9m3-4v-2H6v2h12z"/></svg><span>Show page</span></a></li><li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=revisions" title="Old revisions [o]" rel="nofollow" accesskey="o" class="menuitem revs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M11 7v5.11l4.71 2.79.79-1.28-4-2.37V7m0-5C8.97 2 5.91 3.92 4.27 6.77L2 4.5V11h6.5L5.75 8.25C6.96 5.73 9.5 4 12.5 4a7.5 7.5 0 0 1 7.5 7.5 7.5 7.5 0 0 1-7.5 7.5c-3.27 0-6.03-2.09-7.06-5h-2.1c1.1 4.03 4.77 7 9.16 7 5.24 0 9.5-4.25 9.5-9.5A9.5 9.5 0 0 0 12.5 2z"/></svg><span>Old revisions</span></a></li><li class="action"><a href="/web/20221206151450/https://wiki.bash-hackers.org/syntax/ccmd/c_for?do=backlink" title="Backlinks" rel="nofollow" class="menuitem backlink"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z"/></svg><span>Backlinks</span></a></li><li class="action"><a href="#dokuwiki__top" title="Back to top [t]" rel="nofollow" accesskey="t" class="menuitem top"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"/></svg><span>Back to top</span></a></li> </ul>
|
||
|
</div>
|
||
|
</nav>
|
||
|
<!-- /page-tools -->
|
||
|
|
||
|
<div class="panel panel-default px-3 py-2" itemprop="articleBody">
|
||
|
<div class="page panel-body">
|
||
|
|
||
|
|
||
|
<div class="dw-content-page "><!-- content --><div class="dw-content"><p>
|
||
|
This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong.
|
||
|
</p>
|
||
|
<div class="editBox" role="application">
|
||
|
|
||
|
<div class="toolbar group">
|
||
|
<div id="draft__status" class="draft__status"></div>
|
||
|
<div id="tool__bar" class="tool__bar"></div>
|
||
|
</div>
|
||
|
<form id="dw__editform" method="post" action="" accept-charset="utf-8" class=" form-inline"><div class="no">
|
||
|
<input type="hidden" name="sectok" value=""/><input type="hidden" name="id" value="syntax:ccmd:c_for"/><input type="hidden" name="rev" value="0"/><input type="hidden" name="date" value="0"/><input type="hidden" name="prefix" value="."/><input type="hidden" name="suffix" value=""/><input type="hidden" name="changecheck" value="2bcd0972beff0db37f437e805823ba59"/><input type="hidden" name="target" value="section"/><textarea name="wikitext" id="wiki__text" dir="auto" class="edit form-control" cols="80" rows="10" tabindex="1" readonly="readonly">
|
||
|
====== The C-style for-loop ======
|
||
|
|
||
|
===== Synopsis =====
|
||
|
<code>
|
||
|
for (( <EXPR1> ; <EXPR2> ; <EXPR3> )); do
|
||
|
<LIST>
|
||
|
done
|
||
|
</code>
|
||
|
|
||
|
<code>
|
||
|
# as a special case: without semicolon after ((...))
|
||
|
for (( <EXPR1> ; <EXPR2> ; <EXPR3> )) do
|
||
|
<LIST>
|
||
|
done
|
||
|
</code>
|
||
|
|
||
|
<code>
|
||
|
# alternative, historical and undocumented syntax
|
||
|
for (( <EXPR1> ; <EXPR2> ; <EXPR3> )) {
|
||
|
<LIST>
|
||
|
}
|
||
|
</code>
|
||
|
|
||
|
===== Description =====
|
||
|
|
||
|
The C-style for-loop is a [[syntax/basicgrammar#compound_commands | compound command]] derived from the equivalent ksh88 feature, which is in turn derived from the C "for" keyword. Its purpose is to provide a convenient way to evaluate arithmetic expressions in a loop, plus initialize any required arithmetic variables. It is one of the main "loop with a counter" mechanisms available in the language.
|
||
|
|
||
|
The ''<nowiki>((;;))</nowiki>'' syntax at the top of the loop is not an ordinary [[syntax/ccmd/arithmetic_eval | arithmetic compound command]], but is part of the C-style for-loop's own syntax. The three sections separated by semicolons are [[syntax:arith_expr | arithmetic expression]] contexts. Each time one of the sections is to be evaluated, the section is first processed for: brace, parameter, command, arithmetic, and process substitution/expansion as usual for arithmetic contexts. When the loop is entered for the first time, ''<EXPR1>'' is evaluated, then ''<EXPR2>'' is evaluated and checked. If ''<EXPR2>'' is true, then the loop body is executed. After the first and all subsequent iterations, ''<EXPR1>'' is skipped, ''<EXPR3>'' is evaluated, then ''<EXPR2>'' is evaluated and checked again. This process continues until ''<EXPR2>'' is false.
|
||
|
|
||
|
* ''<EXPR1>'' is to **initialize variables** before the first run.
|
||
|
* ''<EXPR2>'' is to **check** for a termination condition. This is always the last section to evaluate prior to leaving the loop.
|
||
|
* ''<EXPR3>'' is to **change** conditions after every iteration. For example, incrementing a counter.
|
||
|
|
||
|
:!: If one of these arithmetic expressions in the for-loop is empty, it behaves as if it would be 1 (**TRUE** in arithmetic context).
|
||
|
|
||
|
:!: Like all loops (Both types of ''for''-loop, ''while'' and ''until''), this loop can be:
|
||
|
* Terminated (broken) by the [[commands/builtin/continuebreak | break]] builtin, optionally as ''break N'' to break out of ''N'' levels of nested loops.
|
||
|
* Forced immediately to the next iteration using the [[commands/builtin/continuebreak | continue]] builtin, optionally as the ''continue N'' analog to ''break N''.
|
||
|
|
||
|
The equivalent construct using a [[syntax/ccmd/while_loop | while loop]] and the [[syntax:ccmd:arithmetic_eval | arithmetic expression compound command]] would be structured as:
|
||
|
<code>
|
||
|
(( <EXPR1> ))
|
||
|
while (( <EXPR2> )); do
|
||
|
<LIST>
|
||
|
(( <EXPR3> ))
|
||
|
done
|
||
|
</code>
|
||
|
The equivalent ''while'' construct isn't exactly the same, because both, the ''for'' and the ''while'' loop behave differently in case you use the [[commands/builtin/continuebreak | continue]] command.
|
||
|
|
||
|
|
||
|
==== Alternate syntax ====
|
||
|
|
||
|
Bash, Ksh93, Mksh, and Zsh also provide an alternate syntax for the ''for'' loop - enclosing the loop body in ''{<nowiki>...</nowiki>}'' instead of ''do <nowiki>...</nowiki> done'':
|
||
|
|
||
|
<code>
|
||
|
for ((x=1; x<=3; x++))
|
||
|
{
|
||
|
echo $x
|
||
|
}
|
||
|
</code>
|
||
|
|
||
|
This syntax is **not documented** and shouldn't be used. I found the parser definitions for it in 1.x code, and in modern 4.x code. My guess is that it's there for compatibility reasons. Unlike the other aforementioned shells, Bash does not support the analogous syntax for [[syntax/ccmd/case#portability_considerations | case..esac]].
|
||
|
|
||
|
==== Return status ====
|
||
|
|
||
|
The return status is that of the last command executed from ''<LIST>'', or ''FALSE'' if any of the arithmetic expressions failed.
|
||
|
|
||
|
===== Alternatives and best practice =====
|
||
|
<div center round todo 60%>TODO: Show some alternate usages involving functions and local variables for initialization.</div>
|
||
|
===== Examples =====
|
||
|
|
||
|
==== Simple counter ====
|
||
|
|
||
|
A simple counter, the loop iterates 101 times ("0" to "100" are 101 numbers -> 101 runs!), and everytime the variable ''x'' is set to the current value.
|
||
|
|
||
|
* It **initializes** ''x = 0''
|
||
|
* Before every iteration it **checks** if ''x ≤ 100''
|
||
|
* After every iteration it **changes** ''x++''
|
||
|
|
||
|
<code>
|
||
|
for ((x = 0 ; x <= 100 ; x++)); do
|
||
|
echo "Counter: $x"
|
||
|
done
|
||
|
</code>
|
||
|
|
||
|
==== Stepping counter ====
|
||
|
|
||
|
This is the very same counter (compare it to the simple counter example above), but the **change** that is made is a ''x += 10''. That means, it will count from 0 to 100, but with a **step of 10**.
|
||
|
<code>
|
||
|
for ((x = 0 ; x <= 100 ; x += 10)); do
|
||
|
echo "Counter: $x"
|
||
|
done
|
||
|
</code>
|
||
|
|
||
|
==== Bits analyzer ====
|
||
|
|
||
|
This example loops through the bit-values of a Byte, beginning from 128, ending at 1. If that bit is set in the ''testbyte'', it prints "''1''", else "''0''" => it prints the binary representation of the ''testbyte'' value (8 bits).
|
||
|
<code>
|
||
|
#!/usr/bin/env bash
|
||
|
# Example written for http://wiki.bash-hackers.org/syntax/ccmd/c_for#bits_analyzer
|
||
|
# Based on TheBonsai's original.
|
||
|
|
||
|
function toBin {
|
||
|
typeset m=$1 n=2 x='x[(n*=2)>m]'
|
||
|
for ((x = x; n /= 2;)); do
|
||
|
printf %d $(( m & n && 1))
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function main {
|
||
|
[[ $1 == +([0-9]) ]] || return
|
||
|
typeset result
|
||
|
if (( $(ksh -c 'printf %..2d $1' _ "$1") == ( result = $(toBin "$1") ) )); then
|
||
|
printf '%s is %s in base 2!\n' "$1" "$result"
|
||
|
else
|
||
|
echo 'Oops, something went wrong with our calculation.' >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
main "${1:-123}"
|
||
|
|
||
|
# vim: set fenc=utf-8 ff=unix ft=sh :
|
||
|
</code>
|
||
|
|
||
|
<div hide>
|
||
|
<code>
|
||
|
testbyte=123
|
||
|
for (( n = 128 ; n >= 1 ; n /= 2 )); do
|
||
|
if (( testbyte & n )); then
|
||
|
printf %d 1
|
||
|
else
|
||
|
printf %s 0
|
||
|
fi
|
||
|
done
|
||
|
echo
|
||
|
</code>
|
||
|
</div>
|
||
|
|
||
|
Why that one begins at 128 (highest value, on the left) and not 1 (lowest value, on the right)? It's easier to print from left to right...
|
||
|
|
||
|
We arrive at 128 for ''n'' through the recursive arithmetic expression stored in ''x'', which calculates the next-greatest power of 2 after ''m''. To show that it works, we use ksh93 to double-check the answer, because it has a built-in feature for ''printf'' to print a representation of any number in an arbitrary base (up to 64). Very few languages have that ability built-in, even things like Python.
|
||
|
|
||
|
==== Up, down, up, down... ====
|
||
|
|
||
|
This counts up and down from ''0'' to ''${1:-5}'', ''${2:-4}'' times, demonstrating more complicated arithmetic expressions with multiple variables.
|
||
|
|
||
|
<code>
|
||
|
for (( incr = 1, n=0, times = ${2:-4}, step = ${1:-5}; (n += incr) % step || (incr *= -1, --times);)); do
|
||
|
printf '%*s\n' "$((n+1))" "$n"
|
||
|
done
|
||
|
</code>
|
||
|
<code> ~ $ bash <(xclip -o)
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
4
|
||
|
5
|
||
|
4
|
||
|
3
|
||
|
2
|
||
|
1
|
||
|
0
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
4
|
||
|
5
|
||
|
4
|
||
|
3
|
||
|
2
|
||
|
1
|
||
|
</code>
|
||
|
|
||
|
===== Portability considerations =====
|
||
|
|
||
|
* C-style for loops aren't POSIX. They are available in Bash, ksh93, and zsh. All 3 have essentially the same syntax and behavior.
|
||
|
* C-style for loops aren't available in mksh.
|
||
|
|
||
|
===== Bugs =====
|
||
|
|
||
|
* //Fixed in 4.3//. <del>There appears to be a bug as of Bash 4.2p10 in which command lists can't be distinguished from the for loop's arithmetic argument delimiter (both semicolons), so command substitutions within the C-style for loop expression can't contain more than one command.</del>
|
||
|
|
||
|
===== See also =====
|
||
|
|
||
|
* Internal: [[syntax:arith_expr | Arithmetic expressions]]
|
||
|
* Internal: [[syntax:ccmd:classic_for | The classic for-loop]]
|
||
|
* Internal: [[syntax:ccmd:while_loop | The while-loop]]
|
||
|
</textarea>
|
||
|
<div id="wiki__editbar" class="editBar">
|
||
|
<div id="size__ctl">
|
||
|
</div>
|
||
|
</div>
|
||
|
</div></form>
|
||
|
</div>
|
||
|
</div><!-- /content --></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div class="small text-right">
|
||
|
|
||
|
<span class="docInfo">
|
||
|
<ul class="list-inline"><li><span class="iconify text-muted" data-icon="mdi:file-document-outline"></span> <span title="syntax/ccmd/c_for.txt">syntax/ccmd/c_for.txt</span></li><li><span class="iconify text-muted" data-icon="mdi:calendar"></span> Last modified: <span title="2013/07/15 03:56">2013/07/15 03:56</span></li><li class="text-muted">by <bdi>ormaaj</bdi></li></ul> </span>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</article>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</main>
|
||
|
|
||
|
<footer id="dw__footer" class="dw-container py-5 dokuwiki container-fluid">
|
||
|
<hr/>
|
||
|
<div align="center">
|
||
|
<h3><a target="_blank" href="http://web.archive.org/web/20221206151450/http://www.performing-databases.com/">This site is supported by Performing Databases - your experts for database administration</a></h3>
|
||
|
</div>
|
||
|
<hr/>
|
||
|
<div align="center">
|
||
|
<script async src="//web.archive.org/web/20221206151450js_/https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
||
|
<!-- BHORG_BOTTOM -->
|
||
|
<ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-4658830517838678" data-ad-slot="1603598940"></ins>
|
||
|
<script>
|
||
|
(adsbygoogle = window.adsbygoogle || []).push({});
|
||
|
</script>
|
||
|
</div>
|
||
|
|
||
|
<!-- footer -->
|
||
|
<div class="dw-container small container-fluid mx-5">
|
||
|
|
||
|
|
||
|
<div class="footer-dw-title">
|
||
|
<div class="media">
|
||
|
<div class="media-left">
|
||
|
<img src="/web/20221206151450im_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/images/logo.png" alt="Bash Hackers Wiki" class="media-object" style="height:32px"/>
|
||
|
</div>
|
||
|
<div class="media-body">
|
||
|
<div class="row">
|
||
|
<div class="col-sm-2">
|
||
|
<h4 class="media-heading">Bash Hackers Wiki</h4>
|
||
|
<p>
|
||
|
</p>
|
||
|
</div>
|
||
|
<div class="col-sm-10">
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div class="footer-license row">
|
||
|
<hr/>
|
||
|
<div id="dw__license" class="col-sm-6">
|
||
|
<p>
|
||
|
<a href="http://web.archive.org/web/20221206151450/http://www.gnu.org/licenses/fdl-1.3.html" title="GNU Free Documentation License 1.3" target="" itemscope itemtype="http://schema.org/CreativeWork" itemprop="license" rel="license" class="license"><img src="/web/20221206151450im_/https://wiki.bash-hackers.org/lib/tpl/bootstrap3/images/license/gnufdl.png" width="24" height="24" alt="gnufdl"/> </a> </p>
|
||
|
<p class="small">
|
||
|
Except where otherwise noted, content on this wiki is licensed under the following license:<br/><a href="http://web.archive.org/web/20221206151450/http://www.gnu.org/licenses/fdl-1.3.html" title="GNU Free Documentation License 1.3" target="" itemscope itemtype="http://schema.org/CreativeWork" itemprop="license" rel="license" class="license">GNU Free Documentation License 1.3</a> </p>
|
||
|
</div>
|
||
|
|
||
|
<div class="col-sm-6">
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
<!-- /footer -->
|
||
|
</footer>
|
||
|
|
||
|
<a href="#dokuwiki__top" class="back-to-top hidden-print btn btn-default" title="skip to content" accesskey="t">
|
||
|
<span class="iconify" data-icon="mdi:chevron-up"></span> </a>
|
||
|
|
||
|
<div id="screen__mode"> <span class="visible-xs-block"></span>
|
||
|
<span class="visible-sm-block"></span>
|
||
|
<span class="visible-md-block"></span>
|
||
|
<span class="visible-lg-block"></span>
|
||
|
</div>
|
||
|
|
||
|
<img src="/web/20221206151450im_/https://wiki.bash-hackers.org/lib/exe/indexer.php?id=syntax%3Accmd%3Ac_for&1670339719" width="2" height="1" alt=""/>
|
||
|
</div>
|
||
|
|
||
|
</body>
|
||
|
</html>
|
||
|
<!--
|
||
|
FILE ARCHIVED ON 15:14:50 Dec 06, 2022 AND RETRIEVED FROM THE
|
||
|
INTERNET ARCHIVE ON 11:36:29 Apr 14, 2023.
|
||
|
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
|
||
|
|
||
|
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
|
||
|
SECTION 108(a)(3)).
|
||
|
-->
|
||
|
<!--
|
||
|
playback timings (ms):
|
||
|
captures_list: 69.991
|
||
|
exclusion.robots: 0.122
|
||
|
exclusion.robots.policy: 0.114
|
||
|
cdx.remote: 0.057
|
||
|
esindex: 0.009
|
||
|
LoadShardBlock: 45.138 (3)
|
||
|
PetaboxLoader3.datanode: 61.945 (4)
|
||
|
load_resource: 356.709
|
||
|
PetaboxLoader3.resolve: 303.716
|
||
|
-->
|