私は複雑な grep/awk/etc コマンドラインを持っていて、既にいくつかの " 一部の $var を使用しているため、使用することさえ不可能になっています
VAR="$( that command )"
すべての出力を取得するには
私は一時ファイルを作成したくありません。
パイプ出力をbashの変数に渡すことは可能ですか?
お気に入り
command | > $VAR
: を使用するだけで、次の行に記述する場合とまったく同じように記述できますVAR=$(complex command )
。complex command
例:持っている場合
foo=1
bar="2 3"
awk -v myfoo="$foo" -v mybar="$bar" '..... complex
awk
script here .....'
あなたはそれをVARに入れることができます:
foo=1
bar="2 3"
VAR="$( awk -v myfoo="$foo" -v mybar="$bar" '..... complex
awk
script here .....' )"
つまり、$(...) 内に入ると、bash は「最初のレベル」にあるかのように読み取ります。$(...) を含む行が評価される前に最初に評価されるため、機能します。
次のように for ループを実行できます (警告、for ループは出力をスペースで分割します。したがって、反復によって単語が得られます)。
#!/usr/bin/ksh
for RC_OUTPUT in $(./testEcho.ksh)
do
echo $RC_OUTPUT
done
より複雑な解決策 (最大行長 = 80): #!/usr/bin/ksh
LINE_LENGTH_MAX=80
LINE_LENGTH=0
for RC_OUTPUT in $(./testEcho.ksh)
do
CURRENT_LENGTH="$(expr length $RC_OUTPUT)"
(( LINE_LENGTH = LINE_LENGTH + CURRENT_LENGTH + 1 ))
if [[ $LINE_LENGTH -gt $LINE_LENGTH_MAX ]]
then
LINE_LENGTH=$CURRENT_LENGTH
echo $RC_OUTPUT
else
echo -n "$RC_OUTPUT "
fi
done