我有一个复杂的grep / awk / etc命令行,它使用了一些“$ $ var,这使得它甚至无法使用
VAR="$( that command )"
获取所有输出
我不想创建临时文件,这使得它甚至难看,
是否可以将管道输出传递给bash中的变量
像
command | > $VAR
答案 0 :(得分:2)
只需使用:VAR=$(complex command )
,就像在下一行写下complex command
一样。{/ p>
例如:如果你有
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就会把事情看作是“第一级”。它的工作原理是在评估包含它的行之前首先计算$(...)。
答案 1 :(得分:0)
你可以按照以下方式执行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