Linux がよく備えているものがあるとすれば、それは文字列を操作するためのユーティリティです。しかし、 Bash シェル には一連の機能が直接組み込まれています。使用方法は次のとおりです。
文字列の操作
Linux エコシステムには、テキストや文字列を操作するための素晴らしいツールが満載です。これらには、 awk 、 grep 、 sed 、および Cut が含まれます。大量のテキストラングリングを行う場合は、これらを選択することをお勧めします。
ただし、場合によっては、特に短くて単純なスクリプトを作成する場合には、シェルの組み込み機能を使用すると便利です。スクリプトを他の人と共有し、そのコンピュータで実行する場合、標準の Bash 機能を使用すると、他のユーティリティの存在やバージョンについて心配する必要がなくなります。
専用ユーティリティの機能が必要な場合は、ぜひ使用してください。それが彼らがそこにいる理由です。ただし、多くの場合、スクリプトと Bash は単独で仕事を完了できます。
これらは Bash に組み込まれているため、スクリプトまたはコマンド ラインで使用できます。ターミナル ウィンドウでこれらを使用すると、コマンドのプロトタイプを作成し、構文を完成させるための迅速かつ便利な方法です。これにより、編集、保存、実行、デバッグのサイクルが回避されます。
文字列変数の作成と操作
変数を宣言し、それに文字列を割り当てるために必要なのは、等号を使用して変数に名前を付けることだけです。
=
、文字列を指定します。文字列にスペースが含まれる場合は、一重引用符または二重引用符で囲みます。等号の両側に空白がないことを確認してください。
my_string="こんにちは、ハウツーオタクの世界。"
$my_string をエコーする
変数を作成すると、その変数名がシェルのタブ補完単語のリストに追加されます。この例では、「my_」と入力して「Tab」キーを押すと、コマンド ラインにフルネームが入力されます。
読み取り専用変数
変数の宣言に使用できる
declare
コマンドがあります。単純な場合には実際には必要ありませんが、これを使用するとコマンドのオプションの一部を使用できるようになります。おそらく最もよく使用するのは
-r
(読み取り専用) オプションです。これにより、変更できない読み取り専用の変数が作成されます。
destroy -r read_only_var="これは不変の文字列です!"
新しい値を代入しようとすると失敗します。
read_only_var="新しい文字列..."
ターミナルウィンドウへの書き込み
echo または printf を 使用して複数の文字列をターミナル ウィンドウに書き込むと、それらが 1 つの文字列であるかのように表示されます。また、独自の文字列変数に限定されず、 環境変数を コマンドに組み込むこともできます。
user_account="あなたのユーザー アカウントは:"
echo $user_account $USER
文字列の連結
プラスイコール演算子
+=
使用すると、2 つの文字列を「加算」できます。それを連結と言います。
user_account="あなたのユーザー アカウントは:"
ユーザーアカウント+=$USER
$user_account をエコーする
連結された文字列の間にスペースは自動的に追加されないことに注意してください。スペースが必要な場合は、最初の文字列の末尾または 2 番目の文字列の先頭に明示的にスペースを入れる必要があります。
user_account="あなたのユーザー アカウントは次のとおりです: "
ユーザーアカウント+=$USER
$user_account をエコーする
ユーザー入力の読み取り
宣言の一部として内容が定義された文字列変数を作成するだけでなく、ユーザー入力を文字列変数に読み取ることができます。
read
コマンドはユーザー入力を読み取ります。
-p
(プロンプト) オプションは、ターミナル ウィンドウにプロンプトを書き込みます。ユーザーの入力は文字列変数に保存されます。この例では、変数は
user_file
と呼ばれます。
read -p "どのファイルを開きますか?" user_file
$user_file をエコーする
入力をキャプチャするための文字列変数を指定しなくても、機能します。ユーザー入力は
REPLY
という変数に保存されます。
read -p "どのファイルを開きますか?"
エコー $REPLY
通常は、独自の変数を用意し、意味のある名前を付ける方が便利です。
文字列の操作
これで、作成時に定義された文字列、ユーザー入力から読み取られた文字列、または文字列を連結して作成された文字列を取得したので、それらを使用して処理を開始できます。
文字列の長さを調べる
文字列の長さを知ることが重要または有用な場合は、変数名の前にハッシュ「
#
」記号を付けることで文字列の長さを取得できます。
my_string="この文字列には 39 文字が含まれています。"
エコー ${#my_string}
文字オフセットによる部分文字列の抽出
文字列内の開始点とオプションの長さを指定することで、文字列変数から部分文字列を抽出できます。長さを指定しない場合、部分文字列には開始点から最後の文字までのすべてが含まれます。
変数名の後に開始点と長さがコロン「
:
」で続きます。文字列変数内の文字には 0 から始まる番号が付けられることに注意してください。
long_string="フランケンシュタイン、あるいは現代のプロメテウス"
部分文字列=${長い文字列:0:12}
$部分文字列をエコーする
エコー ${long_string:27}
別のバリエーションでは、文字列の末尾からいくつかの文字を破棄できます。事実上、開始点を設定し、長さとして負の数値を使用できるようになります。部分文字列には、文字列の開始点から末尾までの文字から、負の数で指定した文字数を引いたものが含まれます。
my_string="アルファベット順"
エコー ${my_string:5:-4}
すべての場合において、元の文字列変数は変更されません。 「抽出された」部分文字列は、実際には変数の内容から削除されません。
区切り文字による部分文字列の抽出
文字オフセットを使用する場合の欠点は、抽出する部分文字列が文字列内のどこにあるかを事前に知っておく必要があることです。
文字列が繰り返し文字で区切られている場合、部分文字列が文字列内のどこにあるか、どのくらいの長さであるかがわからなくても、部分文字列を抽出できます。
文字列の先頭から検索するには、変数名の後に 2 つのパーセント記号 (区切り文字
%%
、およびアスタリスク
*
を続けます。この文字列内の単語はスペースで区切られています。
long_string="最初、2、3、4、5"
エコー ${long_string%%' '*}
これは、文字列の先頭から、区切り文字を含まない最初の部分文字列を返します。これは、短い部分文字列オプションと呼ばれます。
長い部分文字列オプションは、区切り文字で区切られた最後の部分文字列までの文字列の先頭部分を返します。つまり、区切り文字で区切られた最後の部分文字列が省略されます。構文上の唯一の違いは、コマンド内で単一のパーセント記号「
%
」を使用することです。
long_string="最初、2、3、4、5"
エコー ${long_string%' '*}
ご想像のとおり、文字列の末尾から同じように検索できます。パーセント記号の代わりにハッシュ「
#
」記号を使用し、コマンド内のアスタリスク「
*
」の後に区切り文字を移動します。
long_string="単語のこの長い文字列はピリオドで区切られています"
${long_string##*.} をエコーします。
これは短い部分文字列オプションであり、区切り文字を含まない文字列の後ろから最初に見つかった部分文字列を切り取ります。
long_string="単語のこの長い文字列はピリオドで区切られています"
${long_string#*.} をエコーします。
長い部分文字列オプションは、文字列の前から最初の区切り文字までの文字列の後部を返します。つまり、最初の区切り文字で区切られた部分文字列が省略されます。
部分文字列の置換
部分文字列を他の部分文字列と交換するのは簡単です。形式は、文字列の名前、置換される部分文字列、および挿入される部分文字列をスラッシュ「
/
」文字で区切ったものです。
string="青ブタが笑います"
エコー ${文字列/豚/ヤギ}
検索を文字列の末尾に限定するには、検索文字列の前にパーセント記号「
%
」文字を付けます。
string="青ブタが笑います"
echo ${string/%くすくす/くすくす笑う}
検索を文字列の先頭に限定するには、検索文字列の前にハッシュ「
#
」文字を付けます。
string="青ブタが笑います"
エコー ${文字列/#青/黄}
文字列は柔軟なものです
文字列が希望どおりでない場合、または必要な場合は、これらのツールを使用して、ニーズに合うように文字列を再フォーマットすることができます。複雑な変換には専用のユーティリティを使用しますが、軽微な調整にはシェル組み込みを使用して、外部ツールの読み込みと実行のオーバーヘッドを回避します。





