<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>配列 &#8211; スグブログ</title>
	<atom:link href="https://sugublog.org/tag/%E9%85%8D%E5%88%97/feed/" rel="self" type="application/rss+xml" />
	<link>https://sugublog.org</link>
	<description>ブログ運営について発信中</description>
	<lastBuildDate>Sat, 02 Mar 2024 17:56:18 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://sugublog.org/wp-content/uploads/2021/07/icon_20210703-min-150x150.png</url>
	<title>配列 &#8211; スグブログ</title>
	<link>https://sugublog.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【シェルスクリプト】配列の使い方！宣言、格納、参照のやり方を教えます</title>
		<link>https://sugublog.org/shell-script-array/</link>
					<comments>https://sugublog.org/shell-script-array/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Sat, 02 Mar 2024 17:56:17 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[配列]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6441</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg" class="webfeedsFeaturedVisual" /></p>shellscriptで配列を使いたいけど、どうやって扱えば良いかわかりません。 などと言ったシェルスクリプトの配列について難しいという声が多いです。 なので配列の宣言から格納や参照などの基本をまずまとめます。 その後に [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">shellscript</span></strong>で<strong><span class="swl-inline-color has-swl-deep-01-color">配列</span></strong>を使いたいけど、どうやって扱えば良いかわかりません。</p>



<p>などと言った<span class="swl-marker mark_orange">シェルスクリプトの配列について難しいという声が多いです。</span></p>



<p>なので<strong>配列</strong>の宣言から格納や参照などの基本をまずまとめます。</p>



<p>その後には要素数を数えたり、配列のコピーのやり方など使えるテクニックを現役エンジニアの筆者が教えます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<p>この記事で<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトの配列についての基礎知識</span></strong>や、<strong>実際の使い方</strong>などを習得する事ができます。</span></p>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトで配列の宣言をする</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="682" src="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg" alt="配列の宣言" class="wp-image-4502" srcset="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-768x511.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>まずは<strong><span class="swl-inline-color has-swl-deep-01-color">配列の宣言</span></strong>のやり方を見ていきます。</p>



<p class="has-border -border02">シェルスクリプトで配列の宣言をする方法は「declare -a 配列名」です。</p>



<p>今回は「my_array1」という箱を作成して、配列と宣言します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -a my_array1</code></pre></div>



<p class="is-style-icon_book">シェルスクリプトで配列以外の宣言をする場合は以下を参照下さい。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>シェルスクリプトで配列以外の宣言方法</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>declare -r 変数 ・・・読み取り専用を宣言</li>



<li>declare -i 変数 ・・・数値を宣言</li>



<li>declare -A 変数 ・・・連想配列を宣言</li>
</ul>
</div></div>



<h2 class="wp-block-heading">シェルスクリプトでの配列の基礎</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="682" src="https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-1024x682.jpg" alt="配列の基礎" class="wp-image-4862" srcset="https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-1024x682.jpg 1024w, https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-768x511.jpg 768w, https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">配列の初期化</h3>



<p>まずは<strong><span class="swl-inline-color has-swl-deep-01-color">配列を初期化</span></strong>します。配列=()とすることで初期化できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=()</code></pre></div>



<p class="has-border -border01">これで配列に値が格納されていたとしても、初期化して新しい配列として使用する事ができます。</p>



<h3 class="wp-block-heading">配列に値を格納する方法</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">配列に値を格納</span></strong>します。配列=(値1 値2 値3 . . .)という風に値を入れていきます。</p>



<p>配列に値を格納するには配列の後にスペースなしで「=（）」を入力して、（）の中に値をスペース区切りで格納していきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)</code></pre></div>



<p class="has-border -border01">今回は「my_array1」という配列に0と1と2を格納しました。</p>



<h3 class="wp-block-heading">配列の値を参照する方法</h3>



<p>では先程、<strong><span class="swl-inline-color has-swl-deep-01-color">配列に格納した値を参照</span></strong>してみます。</p>



<p>配列の値を参照するには${配列名[インデックス番号]}で可能です。</p>



<p class="is-style-icon_info">インデックスとは配列の値を参照できる番号です。シェルスクリプトでは0からになります。一番目に入っている値はインデックス0で参照できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${my_array1[0]}</code></pre></div>



<p class="has-border -border01">これで配列の１番目（インデックス0）の値を参照できます。</p>



<h3 class="wp-block-heading">実践：配列の値を参照してみる</h3>



<p>実際に配列のインデックス0の値をechoコマンドで表示してみます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/school_08-3-300x188.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-echo/">【シェルスクリプト基礎】echoコマンドの使い方！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトのechoコマンドの使い方で疑問に思っている事などないでしょうか？ 思い通りに文字列を表示できなかったりしないでしょうか？ シェルスクリプトでecho&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
echo ${my_array1[0]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p class="has-border -border01">実行結果は「0」が表示されます。</p>



<h3 class="wp-block-heading">配列の値を全て参照する方法</h3>



<p>配列にどのような値がはいっているか、一括で表示できたら楽だと思いませんか？</p>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列に入っている値を一括参照</span></strong>するには以下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${my_array1[@]}
または
${my_array1[*]}</code></pre></div>



<p>このスクリプトで配列の全ての値を参照できます。</p>



<h3 class="wp-block-heading">実践：配列の値を全て参照してみる</h3>



<p>実際に配列の全ての値をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">結果は全ての値が参照できています。</p>



<h2 class="wp-block-heading">配列の途中から参照する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-1024x576.jpg" alt="script" class="wp-image-3958" srcset="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>配列の基礎で全ての値を参照する方法がありましたが、<strong><span class="swl-inline-color has-swl-deep-02-color">途中から参照する方法</span></strong>もあります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${my_array1[@]:2}</code></pre></div>



<p>上のシェルスクリプトの場合は、配列の2番目から後ろの値を参照できます。</p>



<h3 class="wp-block-heading">実践：配列の途中から参照してみる</h3>



<p>実際に配列の途中からの値をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2 3 4)
echo ${my_array1[@]:2}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>2 3 4</code></pre></div>



<p class="has-border -border01">結果は指定した2以降の全ての値が参照できています。</p>



<h2 class="wp-block-heading">配列のインデックスを参照する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="666" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-1024x666.jpg" alt="code" class="wp-image-4186" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-1024x666.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-300x195.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-768x499.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>配列で値ではなく<strong><span class="swl-inline-color has-swl-deep-02-color">インデックスを表示する方法</span></strong>もあります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${!my_array1[@]}</code></pre></div>



<p>配列名の前に「!」を付ける事でインデックスを参照できます。</p>



<p class="is-style-icon_info">配列名[@]は配列の全てを参照するという意味でしたが、配列名の前に「！」を付ける事で全てのインデックスを参照する事が可能です。</p>



<h3 class="wp-block-heading">実践：配列のインデックスを参照してみる</h3>



<p>実際に配列のインデックスをechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(zero iti ni)
echo ${!my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">結果は全てのインデックスが参照できています。</p>



<h3 class="wp-block-heading">実践：配列のインデックスを途中から参照してみる</h3>



<p>おまけで配列のインデックスを途中からechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(zero iti ni)
echo ${!my_array1[@]:2}</code></pre></div>



<p>上のシェルスクリプトを実行してみましたが、何も表示されません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="is-style-big_icon_batsu">結果的にインデックスは途中から参照する事はできません。</p>



<h2 class="wp-block-heading">インデックスを使用して配列に値を格納する</h2>



<h3 class="wp-block-heading">インデックスを使用して順番に配列に値を格納する</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">配列の好きなインデックスに値を格納</span></strong>してみます。配列名=([0]=値 [1]=値 [2]=値)で可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2)</code></pre></div>



<p>インデックス0に「0」をインデックス1に「1」を、インデックス2に「2」を入れています。</p>



<h3 class="wp-block-heading">実践：インデックスを使用して順番に配列に値を格納してみる</h3>



<p>実際に配列のインデックスに値を格納してみます。その結果をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">インデックスに値を格納できています。</p>



<h3 class="wp-block-heading">インデックスをいくつか飛ばして配列に値を格納する</h3>



<p><span class="swl-marker mark_orange">インデックスをいくつか飛ばして配列に値を格納することもできます。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [2]=2 [4]=4)</code></pre></div>



<p>インデックス0に「0」をインデックス2に「2」を、インデックス4に「4」を入れています。</p>



<p class="is-style-big_icon_caution">この時はインデックス1,3には空白が入る事に注意しましょう！</p>



<h3 class="wp-block-heading">実践：インデックスをいくつか飛ばして配列に値を格納してみる</h3>



<p>実際に配列のインデックスにとびとびで値を格納してみます。その結果をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [2]=2 [4]=4)
echo ${my_array1[0]}
echo ${my_array1[1]}
echo ${my_array1[2]}
echo ${my_array1[3]}
echo ${my_array1[4]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0

2

4</code></pre></div>



<p class="has-border -border01">インデックスに値を格納できています。飛ばしたインデックスは空白になっています。</p>



<h2 class="wp-block-heading">配列の値を上書き格納する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-1024x576.jpg" alt="配列の上書き" class="wp-image-4171" srcset="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong>配列の値を修正</strong>したい場合は、インデックスを指定して値を<strong>上書き</strong>できます。</span></p>



<h3 class="wp-block-heading">実践：配列の値を上書き格納してみる</h3>



<p>配列に値を入れています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=()
my_array1=([1]=1 [2]=3 [4]=4)
echo ${my_array1[@]}</code></pre></div>



<p>入っている値を${my_array1[@]}で全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1 3 4</code></pre></div>



<p>インデックス「2」の値「3」を2に<strong>上書き格納</strong>します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1[2]=2
echo ${my_array1[@]}</code></pre></div>



<p>配列を全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1 2 4</code></pre></div>



<p class="has-border -border01">インデックス「2」の値が「3」から「2」に上書き格納されています。</p>



<h2 class="wp-block-heading">配列の値を削除する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="614" src="https://sugublog.org/wp-content/uploads/2021/07/web-design-007-6-1024x614.jpg" alt="配列の値の削除" class="wp-image-3616"/></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を削除</span></strong>するには「unset 配列[インデックス]」で可能です。</p>



<h3 class="wp-block-heading">実践：配列の値を削除してみる</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2 [3]=fuyo)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトの配列を全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 fuyo</code></pre></div>



<p>インデックス3に格納している値「fuyo」を削除してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>unset my_array1[3]
echo ${my_array1[@]}</code></pre></div>



<p>配列を全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">インデックス3に格納している値「fuyo」が削除されている事がわかります。</p>



<h2 class="wp-block-heading">配列の要素数を数える方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="717" src="https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-1024x717.jpg" alt="配列の要素数を数える" class="wp-image-4271" srcset="https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-1024x717.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-300x210.jpg 300w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-768x538.jpg 768w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">配列</span></strong>にはいくつの要素がはいっているか数えたい時</span>がよくあります。</p>



<p>そんな時は${#配列名[@]}で取得できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${#my_array1[@]}</code></pre></div>



<h3 class="wp-block-heading">実践：配列の要素数を数えてみる</h3>



<p>実際に<strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素数</span></strong>を数えてみます。その結果をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
echo ${#my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>3</code></pre></div>



<p class="has-border -border01">配列の要素数の「3」が表示されています。</p>



<h2 class="wp-block-heading">少し変わった配列の参照方法</h2>



<p><strong>インデックスを指定しない場合</strong>は0の値が表示されます。値を参照する方法は「${配列名[インデックス]}」でした。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2)
${my_array1}</code></pre></div>



<p class="has-border -border01">インデックスを指定しない${my_array1}には「0」が参照されます。</p>



<p>インデックス0を参照する時にない場合は空白になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([2]=2 [3]=3 [4]=4)
echo ${my_array1}</code></pre></div>



<p class="has-border -border01">インデックス0の値が格納されていないので、${my_array1}は空白になります。</p>



<h2 class="wp-block-heading">配列の要素をコピーして使用する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/07/PC007-5-1024x683.jpg" alt="配列のコピー" class="wp-image-3714" srcset="https://sugublog.org/wp-content/uploads/2021/07/PC007-5-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/07/PC007-5-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/07/PC007-5-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/07/PC007-5.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">配列をコピー</span></strong>して<strong><span class="swl-inline-color has-swl-deep-01-color">別の配列</span></strong>として扱いたい場合</span>もあります。そんな場合は下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名2=(&quot;&{配列名1[@]}&quot;)</code></pre></div>



<p>ややこしいですが、下のように考えたら整理がつきやすいです。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>配列の要素をコピーして使用するシェルスクリプトの考え方</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>配列名2=()で箱を作る</li>



<li>コピーしたい配列の値を全表示する${配列名1[@]}を「&#8221;」で囲んで、箱に入れる</li>
</ul>
</div></div>



<h3 class="wp-block-heading">配列の要素をコピーして使用する時の注意点</h3>



<p><span class="swl-marker mark_yellow"><strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素をコピーして使用する時</span></strong>の<span class="swl-bg-color has-swl-deep-01-background-color">注意点</span>として、コピーした後はインデックスに空白があればつめられる</span>という事です。</p>



<p>したの例のようにインデックス2は空白の配列があります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [3]=3)
echo ${my_array1[0]}
echo ${my_array1[1]}
echo ${my_array1[2]}
echo ${my_array1[3]}</code></pre></div>



<p>このシェルスクリプトを実行すると結果は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0
1

3</code></pre></div>



<p>インデックス2の値が空白の配列です。</p>



<p>この配列「my_array1」をコピーして配列「my_array2」にコピーします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array2=(&quot;${my_array1[@]}&quot;)
echo ${my_array2[0]}
echo ${my_array2[1]}
echo ${my_array2[2]}
echo ${my_array2[3]}</code></pre></div>



<p>今度はこのシェルスクリプトを実行すると結果は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0
1
3
</code></pre></div>



<p>コピー前の配列のインデックス2の「空白」がコピー後の配列では「3」になっています。</p>



<p class="is-style-big_icon_caution">つまり配列の要素をコピーして使用する時はインデックスに空白があれば、つめられるという事です。</p>



<h2 class="wp-block-heading">配列の要素をコピーし値を追加して配列を作る方法</h2>



<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">配列のコピー</span></strong>をして、その配列に値を入れたい</span>です。そのような時は下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array2=(&quot;${my_array1[@]}&quot; 3 4 5)</code></pre></div>



<p>先程の配列のコピーのカッコの中に、空白を区切りとして値を格納しています。</p>



<h3 class="wp-block-heading">実践：配列のコピーをして、その配列に値を入れてみる</h3>



<p>実際に配列のコピーをして、その配列に値を入れて、その値をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array2=(&quot;${my_array1[@]}&quot; 3 4 5)
echo ${my_array2[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 3 4 5</code></pre></div>



<p class="has-border -border01">結果はコピーした配列の要素0,1,2の後に、指定した3,4,5が追加された配列になっています。</p>



<p>同じ配列に値を格納したいのであれば、下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array1=(&quot;${my_array1[@]}&quot; 3 4 5)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 3 4 5</code></pre></div>



<p class="has-border -border01">結果は同じ配列にでも同じやり方で値をコピーして追加格納できています。</p>



<p>また単純に配列に値を入れたいのであれば、下のように「+=」を使用すれば簡単です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array1+=(3 4 5)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 3 4 5</code></pre></div>



<p class="has-border -border01">結果は同じ配列に簡単に追加格納できています。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>




<h2 class="wp-block-heading">まとめ：シェルスクリプトで配列の使い方について</h2>


<div class="wp-block-image is-style-border">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="684" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg" alt="配列" class="wp-image-4810" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-300x201.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-768x513.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>シェルスクリプトで<strong><span class="swl-inline-color has-swl-deep-01-color">配列の宣言</span></strong>をする方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -a 配列名</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列を初期化</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=()</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列に値を格納</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=(値0 値1 値2 ...)</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${配列名[インデックス番号]}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を全て参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${配列名[@]}
または
${配列名[*]}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を途中から全て参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${配列名[@]:位置}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列のインデックス値を全て参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${!配列名[@]}</code></pre></div>



<p class="is-style-big_icon_caution">インデックスは途中から参照する事はできません。</p>



<p>インデックスを使用して順番に配列に値を格納する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=([インデックス値0]=値0 [インデックス値1]=値1 [インデックス値2]=値2 ...)</code></pre></div>



<p class="is-style-icon_announce">インデックス値をとびとびにした場合は、とんだインデックスの値は空白になる</p>



<p class="is-style-icon_info">指定したインデックスに値が格納されている時は、上書き格納される</p>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を削除</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>unset 配列名[インデックス値]</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素数を数える</span></strong>方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${#配列名[@]}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素をコピー</span></strong>して使用する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名2=(&quot;&{配列名1[@]}&quot;)</code></pre></div>



<p class="is-style-big_icon_point">配列の要素をコピーして使用する時はインデックスに空白があれば、つめられる。</p>



<p>配列の要素をコピーし値を追加して配列を作る方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>新配列名=(&quot;${旧配列名[@]}&quot; 追加する値1 追加する値2 追加する値3 ...)</code></pre></div>



<p>同じ配列に値を格納したい</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=(&quot;${配列名[@]}&quot; 追加する値1 追加する値2 追加する値3 ...)
または
配列名+=(追加する値1 追加する値2 追加する値3 ...)</code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-right" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">管理人</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>配列は覚える事が沢山ありますが、シェルスクリプトでは必須項目のうちの一つなので、何度も読み直してマスターしてください。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shell-script-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】for文のループ処理を配列で行う方法</title>
		<link>https://sugublog.org/shellscript-for-array/</link>
					<comments>https://sugublog.org/shellscript-for-array/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Mon, 20 Nov 2023 11:53:11 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[配列]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=5941</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/10/table_20211010-1-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトのループでfor文を使用しますが、順に入れる文字列が複雑なので配列で指定したい事はないでしょうか？ そういった場合の処理のやり方を、実践していきます。 シェルスクリプトのfor文のループ処理を配列で行う方 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/10/table_20211010-1-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプト</span></strong>のループで<strong><span class="swl-inline-color has-swl-deep-01-color">for文</span></strong>を使用しますが、順に入れる文字列が複雑なので<strong><span class="swl-inline-color has-swl-deep-01-color">配列で指定したい</span></strong>事はないでしょうか？</p>



<p>そういった場合の処理のやり方を、実践していきます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトのfor文のループ処理を配列で行う方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="519" src="https://sugublog.org/wp-content/uploads/2021/11/nedan-1024x519.jpg" alt="配列" class="wp-image-4540" srcset="https://sugublog.org/wp-content/uploads/2021/11/nedan-1024x519.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/nedan-300x152.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/nedan-768x389.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/nedan.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong>シェルスクリプト</strong>で<strong>ループの処理</strong>を<strong><span class="swl-inline-color has-swl-deep-01-color">配列</span></strong>で行うには、以下のプログラミングを行います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for 変数 in ${配列名[@]}
 do
  繰り返す処理
 done</code></pre></div>



<p>これでループ処理を配列で処理できます。<span class="swl-marker mark_orange"><strong>配列に入っている順番に要素が変数</strong>に入り処理されます。</span></p>



<h2 class="wp-block-heading">配列の宣言と要素の格納方法</h2>



<h3 class="wp-block-heading">配列の宣言方法</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">配列の宣言</span></strong>を行います。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>宣言方法</th><th>意味</th></tr></thead><tbody><tr><td>declare -a 変数</td><td>配列を表す</td></tr><tr><td>declare -ar 変数</td><td>読み取り専用の配列を表す</td></tr></tbody></table><figcaption class="wp-element-caption">配列の宣言方法</figcaption></figure>



<p>これで指定した変数は配列となります。※特に指定しなくても良いです。</p>



<h3 class="wp-block-heading">配列の要素の格納方法</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">配列に要素を格納</span></strong>していきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>array=(1 2 3 4 5 6 7 8 9)</code></pre></div>



<p>配列名に「=」をつけてカッコの中に要素を詰めていきます。要素と要素はスペースで区切ります。</p>



<p class="has-border -border02">この配列をシェルスクリプトのループに用いると、１から順に９まで変数に入り繰り返されます。</p>



<h2 class="wp-block-heading">配列の追加や要素数の取得方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="522" src="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-1024x522.jpg" alt="配列の要素を追加" class="wp-image-4417" srcset="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-1024x522.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-300x153.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-768x392.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>下のシェルスクリプトで<strong><span class="swl-inline-color has-swl-deep-01-color">配列のコピー</span></strong>も可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>新配列名=(&quot;${配列[@]}&quot;)</code></pre></div>



<p>下のシェルスクリプトで<strong><span class="swl-inline-color has-swl-deep-02-color">配列の前に要素を追加</span></strong>できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>新配列名=(aaa bbb &quot;${配列[@]}&quot;)</code></pre></div>



<p>下のシェルスクリプトで<strong><span class="swl-inline-color has-swl-deep-03-color">配列の後ろに要素を追加</span></strong>できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>新配列名=(&quot;${配列[@]}&quot; aaa bbb)</code></pre></div>



<p><strong>今の配列</strong>に簡単に追加する事も可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名+=(aaa bbb)</code></pre></div>



<p>下のシェルスクリプトでは<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素数</span></strong>を数えます。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${#配列[@]}</code></pre></div>



<p>全ての配列を表す「${配列[@]}」の中に「#」を入れる事で要素数の数を数えてくれます。</p>



<p>以下のシェルスクリプトでは配列に入っている要素数だけ繰り返す事ができます。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>array=(3 4 5)

for ((i=1; i&lt;=${#array[@]}; i++))
 do
  echo $i回繰り
 done</code></pre></div>



<p>このシェルスクリプトを実行してみます。</p>


<div class="wp-block-image is-style-browser_mac">
<figure class="aligncenter size-full"><img decoding="async" width="412" height="57" src="https://sugublog.org/wp-content/uploads/2023/11/array_for_loop.png" alt="" class="wp-image-5951" srcset="https://sugublog.org/wp-content/uploads/2023/11/array_for_loop.png 412w, https://sugublog.org/wp-content/uploads/2023/11/array_for_loop-300x42.png 300w" sizes="(max-width: 412px) 100vw, 412px" /></figure>
</div>


<p>配列に格納されている数だけ繰り返されました！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shellscript-for-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
