シェル完全分析(2):文字列変数と配列変数

I.はじめに

この記事では、主にシェルスクリプトの文字列変数と配列変数を紹介します。

Shellの配列タイプは文字列と配列であり、基本的にすべての作業を実行できることを覚えておいてください。始めましょう。

2.シェル文字列変数

2.1シングル、ダブル、バックティック

シェルには、一重引用符''、二重引用符 ""、および逆引用符``の3種類の引用符があります。

次のように、最初に一重引用符''と二重引用符""について説明しましょう。

同じ点:どちらも変数の真ん中のスペースの問題を解決します。「スペース」はbashでは非常に特殊文字であるため、たとえば、str = this is Stringがbashで定義されている場合、エラーが報告されます。エラーを回避するには、一重引用符''と二重引用符""が必要です。利用される。

違い:一重引用符''と二重引用符""の違いは、一重引用符''はすべての文字から特別な意味を奪い、一重引用符''は単純な文字になることです。例外は、二重引用符 ""内のパラメーター置換($)とコマンド置換( ``)です。たとえば、次のように入力します。

n=3
echo '$n'

しかし
ここに画像の説明を挿入

バックティックをもう一度見てください。バックティックはコマンド置換です。コマンド置換とは、シェルが最初にコマンドを実行し、出力結果を一時的に保存して、適切な場所に出力できることを意味します。次の例では、コマンド実行の結果が変数に格納されます。

#!/bin/bash

DATE=`date`
echo "Date is $DATE"

UP=`date ; uptime`
echo "Uptime is $UP"

ここに画像の説明を挿入

概要:バッククォートのコア機能はコマンド置換であり、実行するコマンドをラップし、英語のセミコロンをラップすることは改行です。
一重引用符と二重引用符は異なります。
変数は二重引用符で識別できますが、変数は一重引用符で識別できません。
エスケープ文字は二重引用符で識別できますが、エスケープ文字は一重引用符で識別できません。

2.23つの形式の文字列

シェルでは、文字列には次の3つの形式があります。引用符なし、一重引用符、および二重引用符です。

your_name="runoob"
echo $your_name

# 这里会被解释为一个被双引号包裹的字符串,加$符号的变量会被读取
str="Hello, I know you are $your_name! \n"
echo $str

# 这里会被解释为两个双引号字符串拼接,即""+变量+"",加$符号的变量会被读取
str="Hello, I know you are "$your_name"! \n"
echo $str

# 引号无法解释变量的
str='Hello, I know you are "$your_name"! \n'
echo $str

# 双引号内部可以加转义字符,转义双引号为普通字符,而不是被解释为双引号字符串拼接
str="Hello, I know you are \"$your_name\"! \n"
echo $str

str="Hello, I know you are '$your_name'! \n"
echo $str

str="Hello, I know you are \'$your_name\'! \n"
echo $str

ここに画像の説明を挿入

2.3文字列変数の割り当てと読み取り

echo $a
echo a

ここに画像の説明を挿入

a=b
echo $a

ここに画像の説明を挿入

2.4文字列の連結

your_name="runoob"

# 不使用引号,则赋值号右边的字符串中不能包含空格,因为不能包含空格,但是$符号
# 默认是空格确定变量名的,如果变量名后面还是字符串,要读取的变量必须加上{}
greeting_0=hello,$your_name
echo $greeting_0
# $符号默认是空格确定变量名的,如果变量名后面还是字符串,要读取的变量必须加上{}
greeting_0=hello,${your_name}!
echo $greeting_0

# 使用双引号拼接
greeting_1="hello, "$your_name" !"
greeting_2="hello, "${your_name}" !"
greeting_3="hello, $your_name !"
greeting_4="hello, ${your_name} !"
echo $greeting_1
echo $greeting_2
echo $greeting_3
echo $greeting_4


# 使用单引号拼接
greeting_5='hello, '$your_name' !'
greeting_6='hello, '${your_name}' !'
greeting_7='hello, $your_name !'
greeting_8='hello, ${your_name} !'
echo $greeting_5  
echo $greeting_6
echo $greeting_7
echo $greeting_8

ここに画像の説明を挿入

2.5文字列の長さを取得する

文字列の前に#を追加して、メソッドを呼び出さずに文字列の長さを取得します

string="abcd"
echo ${
    
    #string}   # 输出 4
echo ${
    
    #string[0]}   # 输出 4

ここに画像の説明を挿入

2.6部分文字列の抽出

最初の文字のインデックス値は0です。たとえば、文字列の2番目の文字から4文字を切り捨てます。

string =“ runoob is a great site”
echo $ {string:1:4}#再出unoo

ここに画像の説明を挿入

3、シェル配列

Bashは1次元配列のみをサポートし、多次元配列はサポートしません。連続した添え字を使用することはできません。また、配列のサイズに制限はありません。つまり、配列の長さは不定であり、背面に無制限の要素を含めることができます。 。配列要素の添え字には、0から始まる番号が付けられています。配列内の要素を取得するには、下付き文字を使用します。下付き文字は整数または算術式にすることができ、その値は0以上である必要があります。

3.1配列定義

シェルでは、括弧は配列を示すために使用され、配列要素は「スペース」記号で区切られます。配列を定義する一般的な形式は次のとおりです。

数组名=(值1 值2 ... 值n)

例えば:

array_name=(value0 value1 value2 value3)

また

array_name=(
value0
value1
value2
value3
)

アレイの個々のコンポーネントを個別に定義することもできます。

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

3.2配列の割り当て

シンプルです

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

3.3配列の読み取り

配列要素の値を読み取るための一般的な形式は次のとおりです。

${
    
    数组名[下标]}

例えば:

valuen=${array_name[n]}

@記号を使用して配列内のすべての要素を取得するか、*を使用して配列内のすべての要素を取得します。次に例を示します。

echo ${array_name[@]}
echo ${array_name[*]}

3.4配列の長さを取得する

配列の長さを取得する方法は、文字列の長さを取得する方法と同じです。つまり、配列変数名の前に#を追加します。次に例を示します。

# 取得数组元素的个数
length=${
    
    #array_name[@]}
# 或者
length=${
    
    #array_name[*]}
# 取得数组单个元素的长度
lengthn=${
    
    #array_name[n]}

配列の定義、割り当て、読み取り、および長さの計算は次のとおりです。

ここに画像の説明を挿入
概要:シェルでは、配列の操作には次のものが含まれます。
(1)配列要素を書き込むときは、そのすぐ後ろに代入番号と定数/変数を追加するだけです。
(2)配列の要素を読み取る場合、要素を読み取る${}前があります。
特に、配列全体のすべての要素を取得するには、正方形の添え字番号を使用します。ブラケットは@またはに変更されます*。これは、ループ内${array_name[@]} ${array_name[*]}で一般的に使用されfor var in arrayます。ここでの配列は、配列のすべての要素を取得する必要があります。
(3)単一の配列の長さを取得し、配列要素の上にレイヤーをラップし、配列${#}全体の長さ(配列全体の要素の数)を取得します。つまり${#array_name[@]} ${#array_name[*]}for ((i=0;i<${#array[*]};i++))で使用されます。

第四に、シェルコメント

シェルには2つのコメント方法があります。
(1)#が前に付いた行はコメントと見なされ、インタプリタによって無視されます。
(2)次のように:<<コメントを使用します。

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

EOFは他の記号も使用できます。

实例
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!

ファイブ、終わり

この記事では、主にシェルスクリプトの文字列変数と配列変数を紹介します。

毎日コーディングし、毎日進歩させましょう!

おすすめ

転載: blog.csdn.net/qq_36963950/article/details/123460539