次のファイルがあります。
(blank line)
[Test1]
a=1
b=2
c=3
a
変数の値を読み取らなければb
ならなかったので、コマンドを使用したところ正しく動作しました。ただし、2行目ではコマンドが見つからないというメッセージが表示されます。c
source
[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.