2013-08-23 49 views
1

我有一個複雜的grep/awk中的/ etc命令,它已經使用了一些「有些是$ var線,這使得它無法使用如何將多行輸出從管道傳遞給bash中的變量?不使用臨時文件

VAR="$(that command)" 

讓所有輸出

我不「不想創建臨時文件,這使得它甚至醜陋,

,纔有可能管輸出傳遞到一個變量在bash

command | > $VAR 
+0

'command> $ VAR'會創建一個名爲'$ VAR'的**文件**。 – devnull

+0

您是否試圖在VAR =「$(...」)內跳過「和$字符?」 示例:VAR =「$(echo \」)「; echo $ VAR – StianE

+0

您確定無法使用:'VAR =「$(that command)」'?請注意,在$(...)內部,你「進入」了這個層次,這意味着你不必引用引號。 「'(echo」toto titi「)」''而不是'VAR =「$(echo \」toto titi \「)」'。使用第一種形式('VAR =「$(echo」toto titi「)」')根據需要,您最終會(在bash首先評估$(...)部分)VAR =「toto titi」, –

回答

2

只需使用: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 .....')" 

即一旦在$(...),慶典正在讀的東西,如果它是在「第一級」。它在$(...)在包含它的行被評估之前首先被評估。

+0

它可以工作。 – valpa

0

你可以做一個循環如下(只是一個警告,循環分割輸出的空間。所以,你會得到通過迭代字):

#!/usr/bin/ksh 

    for RC_OUTPUT in $(./testEcho.ksh) 
    do 
     echo $RC_OUTPUT 
    done 

這裏一個更復雜的解決方案(每行的最大lenght = 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 
相關問題