Linuxのbashで変数に値を追加する方法を多数紹介。+=や””を使う方法など
2020/06/05
Linuxの bashで変数に値を代入、追記する方法の解説
環境変数「PATH」にパスを追記する方法
「Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説」の記事で、Linuxの変数を扱う方法と、環境変数「PATH」に値を追加する方法の基本的な手続き方法について解説を行いました。
環境変数「PATH」に値を追加することを想定して解説をしてきましたので、「PATH」にパスを追加する場合は下記の方法を紹介しました。
1 |
$ PATH=$PATH:/home/bin |
環境変数「PATH」の場合は、区切り文字(デリミタ)が「:(コロン)」ですので、上記のように変数名の後ろに「:」をおいて追加する値を記述する方法を採ることができます。
では、例えば「HENSU1」に「xyz」という文字列を区切り文字なしに追記したい場合はどうすればいいのでしょうか?
その方法について解説を行います。
Linuxのbashで変数に値を追加する方法
まずは、変数として「HENSU1」に「abc」という値を入れます。
これ以降は、この「HENSU1=abc
」の状態の変数「HENSU1」に値を追記する処理として解説します。
1 2 3 |
$ HENSU1=abc $ echo $HENSU1 abc |
上記の状態に対して、環境変数「PATH」と同じ様に区切り文字「:(コロン)」をおいて、値を追加することが可能です。
1 2 3 |
$ HENSU1=$HENSU1:xyz $ echo $HENSU1 abc:xyz |
この場合、区切り文字として「:」を使う変数の場合は全く問題ありませんが、「abcxyz」のように区切り文字を使いたくない場合は対応ができません。
1 2 |
$ HENSU1=$HENSU1xyz $ echo $HENSU1 |
上記のように記述すると「HENSU1xyz」全体で変数名ととらえられてしまうため、「HENSU1」の中身は空になってしまいます。(変数「HENSU1xyz」はそれ以前に定義されていないとします。)
そこで、この状況を回避するために下記の 2つの方法を採ることができます。
1 2 3 |
$ HENSU1=$HENSU1"xyz" $ echo $HENSU1 abcxyz |
1 2 3 |
$ HENSU1+=xyz $ echo $HENSU1 abcxyz |
前者は、「Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説」の記事で触れていますが、変数に値を代入する際に値を「’」「”」で囲み、値の範囲を明確化する方法があります。
これを利用し、変数「HENSU1」と値「xyz」を分けて表現することができます。
1 2 3 |
$ HENSU1=$HENSU1" xyz" $ echo $HENSU1 abc xyz |
この方法を利用すると、上記のように「abc」のあとにスペースを入れて「xyz」を追記したい場合にも簡単に応用することができます。
後者は、PHPでも同じ様な記述の方法がありますので、こちらの方がなじみがある方も多いかと思いますが「+=」を使って代入する方法です。(PHPの場合は、文字列の追記ではなく、値の四則演算に使うものですが。)
1 2 3 |
$ HENSU1+=" xyz" $ echo $HENSU1 abc xyz |
また、「+=」とクォートで値を囲む処理を組み合わせることもできます。
ちなみに、わざわざ下記の様な記述をする方はいないと思いますが、変数と値の境界が分かればいいので、下記の様に「”(ダブルクォート)」「’(シングルクォート)」を 2つつなげて書いて、そこが区切りであることを明示する方法も可能ではあります。
1 2 3 |
$ HENSU1=$HENSU1""xyz $ echo $HENSU1 abcxyz |
また、ダブルクォートで囲めば値として処理されますので、スペースを区切り文字として使いたい場合は、上記のような記述方法も可能です。
1 2 3 |
$ HENSU1=$HENSU1" "xyz $ echo $HENSU1 abc xyz |
区切り文字は多様な文字を使うことができる
環境変数「PATH」では区切り文字(デリミタ)として「:(コロン)」を使っていますので、「PATH=$PATH:/home/bin
」のように「:」を変数と値の区切り文字として使っています。
ですが、区切り文字として使える文字は「:」だけではありません。
1 2 3 |
$ HENSU1=$HENSU1+xyz $ echo $HENSU1 abc+xyz |
例えば、上記のように「+」を使うこともできます。
他にも下記の文字を区切り文字として使うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
: コロン + プラス - マイナス * アスタリスク / スラッシュ # シャープ % パーセント = イコール , カンマ . ピリオド ? クエスチョンマーク [ ブラケット ] ブラケット { ブレイス } ブレイス ~ チルダ ^ キャレット |
区切り文字として使えない文字もある
対して、下記の様に、コマンドとして入力する際に意味を持つ記号は使うことができません。
1 2 |
$ HENSU1=$HENSU1_123 $ echo $HENSU1 |
「_(アンダースコア)」は変数名として利用できる記号ですので、「HENSU1_123」で一つの変数として認識されるため、「HENSU1」は空になります。
1 2 |
$ HENSU1=$HENSU1!123 -bash: !123: event not found |
「!(エクスクラメーションマーク)」は、その後に数値を記述した場合は、実行したコマンドの履歴の中からその数値の順番に実行したコマンドを実行します。
上記の例では「123番目」のコマンドはすでに履歴からなくなっていましたので、「not found」となっています。
コマンドの履歴に関しては「Linuxのbashのコマンドの履歴をhistoryで確認し!、↓、↑で実行する」を参照してください。
1 2 3 |
$ HENSU1=$HENSU1$123 $ echo $HENSU1 abc xyz-123123*123/123#12323 |
「$(ドルマーク)」は、「$HENSU1」でも使っていますが、変数名を表す記号ですので、上記の例では「$1」が変数名として認識されています。
1 2 3 4 |
$ HENSU1=$HENSU1&123 [2] 17894 -bash: 123: コマンドが見つかりません [2]- 終了 HENSU1=$HENSU1 |
「&(アンパサンド)」は、実行するコマンドをバックグラウンドで実行する際に使用する記号です。
そこで処理が一つ区切られて、123を別のコマンドとして認識しているため上記のようなエラーとなります。
1 2 3 4 |
$ HENSU1=$HENSU1(123 -bash: 予期しないトークン `(' 周辺に構文エラーがあります $ HENSU1=$HENSU1)123 -bash: 予期しないトークン `)' 周辺に構文エラーがあります |
「()」は、組み合わせて意味を持つ記号ですが、どちらか一つだけではエラーとなります。
1 2 3 4 5 |
$ HENSU1=$HENSU1"123 > $ HENSU1=$HENSU1'123 > |
「’(シングルクォート)」「”(ダブルクォート)」も、それぞれ値を囲むための記号ですので、値の終点を示す閉じるクォートを求められます。
1 2 |
$ HENSU1=$HENSU1;123 -bash: 123: コマンドが見つかりません |
「;(セミコロン)」はコマンドの終了を意味する記号ですので、「HENSU1=$HENSU1;」と「123」がそれぞれ実行されたため、エラーとなっています。(「123」というコマンドがないため)
1 2 |
$ HENSU1=$HENSU1|123 -bash: 123: コマンドが見つかりません |
「|(パイプライン)」は、それより前で実行された標準出力を次のコマンドの標準入力とするための記号ですので、「HENSU1=$HENSU1;」と「123」がそれぞれ実行されたため、エラーとなっています。(「123」というコマンドがないため)
意味を持つ記号を区切り文字に使う方法
Linuxのコマンドを実行する上で意味を持つ記号は区切り文字には使えない、と説明しましたが、下記の様にクォーテーションで囲むことでそれらの意味を持つ記号を区切り文字として使うことも可能になります。
1 2 3 |
$ HENSU1=$HENSU1";"xyz $ echo $HENSU1 abc+xyz |
上記は区切り文字として「:(コロン)」ではなく「;(セミコロン)」を設定しています。
このように、クォーテーションで囲むことでアルファベット、数字、_(アンダースコア)なども区切り文字として使用することができます。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。
-
Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare
Linuxに設定されている主な環境変数の解説。PWD、HOSTNAME、USER、LANG、HOME、LOGNAME、PS1、PS2、HISTSIZE、HISTFILE、HISTFILESIZE、TERMなどがある。
-
Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man
Linuxのコマンドの実行ファイルやマニュアルの情報を確認するコマンドwhich、whereis、whatis、apropos、manの機能と使い方、似たところと違うところの紹介。
-
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
Linuxでファイル、テキストを操作するコマンドのまとめ。cat、less、head、tail、split、tr、sedなど、ファイルを表示、置換、連結、分割などの各コマンドの使い方の紹介と詳細ページの紹介。
-
Linuxのファイル表示・結合catの逆処理のtac、revコマンドの解説
Linuxにtac、revというコマンドがある。catの逆の処理なのだが、tacは最終行から逆に表示し、revは行末の文字から逆に表示をすることを解説しつつその使い方について詳しく解説をする。
-
Linuxのsplitコマンドは指定したサイズにファイルを分割する
Linuxのsplitコマンドはファイルを分割する機能を有する。分割するサイズ、行数、ファイル数を指定するオプションや、分割後のファイルの接尾辞を指定するオプションなどがある。
-
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。
-
Linuxのマニュアルページ表示コマンドmanの解説
Linuxにはコマンド操作のオンラインマニュアルが用意されています。そのマニュアルを表示するコマンドが「man」です。「man」コマンドの使い方について解説します。
-
Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説
Linuxでコマンドを設置するパスの設定情報である環境変数「PATH」の確認方法と環境変数「PATH」に新しいパスを追加する方法の解説。Linuxのシェルでの変数の扱い方についての解説も。
-
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
catはLinuxのコマンドで、本来の機能はファイルを連結だが、ファイルの内容を表示する機能のために使うことが多く使用頻度が高い。同種の機能のmore、less、tacコマンドについても解説。