[bash]変数の色々な使い方

bash

 変数内の文字列を置換などできると知ってわかる範囲でまとめてみました。

1. 変数の長さ取得

「#変数名」とすることで文字列の長さを取得する方法です。

例)
my_string="Hello"
echo ${#my_string}

5

指定されていない場合「0」となる。

例)
echo ${#sample_string}

0

2. 変数の部分抽出

「変数名:<抽出開始>:<抽出文字数>」と指定することで、文字列をの一部を抽出することができます。

my_string="Hello Bash"
# 開始位置 6 から 4 文字を抽出
echo ${my_string:6:4}


Bash

3. 変数の部分削除

「変数名%<削除文字列>」と指定することで、文字列の一部を抽出することができます。

my_string="sample.txt"
# ".txt" を除去
echo ${my_string%.txt}


sample

指定ディレクトリ以下の拡張子を一括で変更する時につかってました。

例)
# 「.txt」をものを「.md」に置換する
for file in /path/to/directory/*.txt; do 
mv "$file" "${file%.txt}.md"
done

4. 変数の部分置換

「変数名/<検索文字列>/<置換文字列>」と指定することで、変数内の文字列の一部を置換できます。

my_string="Hello Bash"
# 'Bash' を 'World' に置換
echo ${my_string/Bash/World}


Hello World

5. 配列の操作

<変数名>=(“<要素0>”,”<要素1>”,”<要素2>” … )と指定することで配列を利用できる。
“[<インデックス(数字)>]”で指定インデックスの値を、
“[@]”で要素数を参照ができる。

例)
my_array=("apple" "banana" "cherry")
      ↑ 0   ↑1 ↑2
echo ${my_array[1]} # 配列の2番目の要素

banana

echo ${#my_array[@]} # 配列の要素数
3

6. 最長/最短一致の削除

こうやって呼ぶらしいのですが、正直わかりづらいので例をいくつか。

最短一致の削除を用いたファイル名の取得
■実行例
path="home/user/docs/file.txt"
echo ${path#*/}
■結果
user/docs/file.txt

[#] が最短一致の削除を表します。以後は最長一致の例と同じで、[*] は任意の文字列、[/]が検索。
このため、「最初の[/]以前(最長)の文字列を削除した結果」を出力させます。

最長一致の削除を用いたファイル名の取得
■実行例
path="home/user/docs/file.txt"
echo ${path##*/}
■結果
file.txt

[##] が最長一致の削除を表し、[*] は任意の文字列、[/]が検索させる文字列となります。
このため、「最後の[/]以前(最長)の文字列を削除した結果」を出力させます。

[応用]最短一致した部分を削除
■実行例
path="home/user/docs/file.txt"
echo ${path%/*}
■結果
home/usr/docs

[#] が左から右の検索だとすると、[%] は右から左の検索のようです。
上の例だと、右から[/]を検索し、最短一致(いちばん初めに文字が見つかった箇所)以前の部分「/file.txt」を削除を表します。

[応用]最長一致した部分を削除
■実行例
path="home/user/docs/file.txt"
echo ${path%%/*}
■結果
home

2つ並べると最長一致になるのは[#]と同じでした。
右から[/]を検索し、最長一致(いちばん最後文字が見つかった箇所)以前の部分「/user/docs/file.txt」を削除を表します。


コメント

タイトルとURLをコピーしました