初心者のWEBデザイン

HTML,CSS、その他WEBデザインに関する事を記述していきます。

bash ShellScript コマンドの実行結果を変数や配列に代入する

ShellSciprtを書いているとfind・grepなどの結果を変数や配列に1行ずつ代入したいことがあります。
代入方法をいつも調べているので残しておきます。

変数に代入したい場合

ルートディクレトリにcat.txtがあった場合

#!/bin/bash

files=$(find . -name "cat.txt")
echo ${files}  
#出力結果/Users/ユーザー名/cat.txt
コマンドの出力が複数だった場合、1行ずつ要素に代入する場合

配列に代入する場合の注意点があります。
ファイル名に空白文字が含まれていると要素がそこで分けられてしまいます。
例えば【animal cat.txt】というファイルが出力された場合、
その結果を配列に代入すると配列には【anima】【cat.txt】が代入されます。
当然要素数は2つになります。

この問題を回避するには、デリミタ を改行ですることで防げます。
ルートディクレトリに【animal cat.txt】【animal dog.txt】【animal bird.txt】があった場合

#!/bin/bash

IFS_bak=$IFS #デフォルトのデリミタをバックアップする
IFS=$'\n' #デリミタを改行に指定する

array=$(find . -name "cat.txt")
echo ${array[@]}
#出力結果 /Users/ユーザー名/animal cat.txt /Users/ユーザー名/animal dog.txt /Users/ユーザー名/animal bird.txt

echo ${#array[*]}
#出力結果 3