(=)などの行を含まないファイルのソースコマンド

(=)などの行を含まないファイルのソースコマンド

次のファイルがあります。

(blank line)
[Test1]
a=1
b=2
c=3

a変数の値を読み取らなければbならなかったので、コマンドを使用したところ正しく動作しました。ただし、2行目ではコマンドが見つからないというメッセージが表示されます。csource[Test1]

[Test1]変数をどのように受け入れることができますか?

基本的に私は次のことを楽しみにしています。

$some_var=[Test1]
$a=1
$b=2
$c=3

したがって、この値をさらに使用できます。

現在私がやっていることは、ファイルから最初の2行を削除してから削除することです。source fileこれにより、変数に行2が表示されなくなります。より良い方法を探しています。私はこれをすべてbashスクリプトで実行しています。

答え1

プロセスの交換があると仮定すると、次のことができます。

source <(sed 's/^\[/some_var=\[/' file)

答え2

ファイルが大きくない場合(bash 4.4以降):

readarray -t arr <infile         # the value in zero is a blank line.
some_var="${arr[1]}"             # use the first line.
. <(printf '%s\n' "${arr[@]:2}") # source the rest.
echo "some_var=$some_var a=$a a=$b a=$c"

実行時:

$ ./script
some_var=[Test1] a=1 a=2 a=3

以前のbashを使用すると、ソリューションはより複雑になりますが、可能です。
これは2.04(2000-03-21)以降のbashと同じバージョンです。

unset arr; i=0
while IFS='' read -r a ; do arr[i]="$a"; ((i++));done <infile
some_var="${arr[1]}"                    # use the first line.
. <(printf '%s\n' "${arr[@]:2}")        # source the rest.

関連情報