
こんにちは。ファイルを読み取って必要な変数をすべて取得し、それを別のコマンドで使用するスクリプトを作成しようとしています。しかし、スクリプトを実行する代わりに printf を試みたところ、空の出力が返されたため、変数が記憶されていないようです。
これが私のコードです
#!/bin/bash
numparams=$#
params=$*
cat tots.txt | while read;
do awk '{
regid=$1;
uport=$2;
ongoingcalls=$3;
ingeg=$4;
maxcalls=$5;
if($3<$5) state=0
if($3==$5) state=1
if($3>$5) state=2
}'
/home/send_script.sh -o "$regid $uport $ongoingcalls $ingeg $maxcalls $state"
done
tots.txt の内容は次のとおりです。
答え1
これは、 と入力して開いたサブシェルで変数が設定されているためですcat <file> | while ...
。したがって、このサブシェルが終了すると、それらの変数にはアクセスできなくなります。
代わりに、次のように言います。
while read; do
...
done < tots.txt
興味深い読み物:パイプライン内のループに変数を設定しました。ループが終了すると変数が消えてしまうのはなぜですか? または、データをパイプして読み取ることができないのはなぜですか?。
awk
また、と変数について混乱しているようですshell
。 に設定した内容はawk
そのまま残るため、 という発言は2 度間違っています。awk の変数は(は列番号を参照します)awk '{$var=2}'
なしで設定され、 var は のスコープ内にあるため、シェルでは使用できません。$
$var
var
awk
次のようなことをしたいかもしれません:
results=($(awk 'BEGIN {print 1,2,3,"a"}'))
results[]
後でアクセスできる配列を作成します。