シェル スクリプト チュートリアル [1] - シェル変数
ディレクトリ: https://blog.csdn.net/shn111/article/details/131590488
参考チュートリアル: https://www.runoob.com/linux/linux-shell.html
オンラインエディター: https://www.runoob.com/try/runcode.php? filename=helloworld&type=bash
シェル変数
変数の定義
name="shn"
注: 変数名と等号の間にスペースを入れることはできません。
- 変数名には英文字、数字、アンダースコアのみを使用でき、最初の文字を数字で始めることはできません
- bash のキーワードは使用できません (予約されたキーワードを表示するには help コマンドを使用してください)
明示的な直接代入に加えて、ステートメントを使用して変数に値を代入することもできます。
name=$(ls)
name=`ls`
変数の使用
定義された変数を使用するには、変数名の前にドル記号 $ を追加するだけです
name="shn"
echo $name
echo ${name}
変数名の外側の中括弧はここではオプションです。中括弧は変数の境界を区別するために追加されます。使用されるすべての変数に中括弧を追加することをお勧めします。
echo "I am ${name}hahaha"
上記の状況を中括弧なしで記述すると、echo "I am $namehahaha"
変数名が区別できなくなります
定義された変数は再定義できます。再定義時に $ 記号を追加する必要はありません。変数を使用する場合にのみ必要です。
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name
読み取り専用変数
次のコマンドを使用して、
readonly
変数を読み取り専用変数として定義できます。
読み取り専用変数の値は変更できず、次のスクリプトを実行するとエラーが報告されます。
your_name="tom"
readonly your_name
your_name="alibaba"
# script.sh: line 3: your_name: readonly variable
変数の削除
変数はコマンドを使用して
unset
削除できます
変数を削除すると、再度使用することはできません。unset コマンドは読み取り専用変数を削除できません。
次のコマンドを実行しても何も出力されません
your_name="tom"
unset your_name
echo ${your_name}
シェル文字列
文字列表現には一重引用符、二重引用符を使用することも、引用符を使用しないこともできます
アポストロフィ
name='bob'
str='this is a string'
echo ${str}
# this is a string
str2='hello ${name}'
echo ${str2}
# hello ${name}
str3='this is a \'string'
echo ${str3}
# unexpected EOF while looking for matching `''
str4='this is ''a string'
echo ${str4}
# this is a string
- シングルクォート内の文字はそのまま出力され、シングルクォーテーション内の変数は無効となります。
- 単一の一重引用符は (エスケープされていても) 一重引用符文字列内に使用できませんが、ペアとして使用して文字列連結として使用できます。
- 一重引用符を含めるには、二重引用符で囲まれた文字列で囲みます。
二重引用符
name="bob"
str="this is a string"
echo ${str}
# this is a string
str2="hello ${name}"
echo ${str2}
# hello bob
str3="this is a \"string"
echo ${str3}
# this is a "string
str4="this is ""a string"
echo ${str4}
# this is a string
str5="this is a\tstring"
echo -e ${str5}
# this is a string
- 二重引用符内に変数を含めることができます
- エスケープ文字は二重引用符で囲むことができます
- echo -e は、\t \a \b \n などのエスケープ文字を解釈します。
文字列を連結する
your_name="bob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# hello, bob ! hello, bob !
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
# hello, bob ! hello, ${your_name} !
文字列の長さを取得する
#get を使用する
変数が文字列の場合、${#string} は ${#string[0]} と同等です。
string="abcd"
echo ${
#string}
# 4
string="abcd"
echo ${
#string[0]}
# 4
部分文字列を抽出する
string:n:m は、
文字列 string の n 番目の文字から始まる m 文字を抽出します。
注: 最初の文字のインデックスは 0 です。
string="helloworld"
str2=${string:2:4}
echo ${str2}
# llow
部分文字列を検索
文字 i または o の位置を調べます (どちらか最初に来る文字がカウントされます)
string="runoob is a great site"
echo `expr index "$string" io`
# 4