2016-08-04 12 views
0

Kurz gesagt möchte ich diese Art von einer Liste produzieren enter image description hereExpanding Variablen in der Befehlszeile

for file in * 
do 
    woC=$(sed -n -e 's#some-regex#\1#p' "$file") 
    idL=$(pcregrep -M '/some-regex/\1/p') 
    gridData="$gridData $file $wowC \"$idL\"" 
done 

Pretend, dass, was in $ WOC ist und $ idL ist nicht wichtig. Wichtig ist, dass $ idL Leerzeichen enthält.

zenity --list \ 
    --title="NCR Service Requests" \ 
    --width=420 --height=500 \ 
    --column="File" --column="Wow Code" --column="ID list" \ 
    $gridData 

ich nicht herausfinden kann, wie bash zu zwingen $ griddata zu erweitern (oder $ idL, ich weiß nicht, wo genau ist das Problem) auf eine solche Art und Weise, dass Leerzeichen erhalten werden, noch separate Felder getrennt bleiben .

+1

Wenn 'idL' separate whitespace-haltige Argumente (zu 'zenity') sein müssen, dann müssen Sie ein Array verwenden (und 'pcregrep' nicht verwenden, wenn Sie keine Möglichkeit haben, die Shell zu loopen, um sie zu teilen) der Weg, den du willst). –

Antwort

0

können Sie xargs verwenden:

xargs lesen Elemente aus der Standardeingabe, begrenzt durch Leerzeichen oder Zeilenumbrüche (die mit Doppel- oder Einzel Anführungszeichen oder einem Backslash geschützt werden können), und führt den Befehl aus. ..

Sie würden die vollständige Liste der Argumente bauen und es zu zenity passieren:

#!/bin/bash 
gridData="\"a b\" \"c\" \"d\"" 
gridData="$gridData \"a\" \"b c\" \"d\"" 
gridData="$gridData \"a\" \"b\" \"c d\"" 

echo "--list 
--title=\"NCR Service Requests\" 
--width=420 --height=500 
--column=\"File\" 
--column=\"Wow Code\" 
--column=\"ID list\" $gridData" | xargs zenity 

exit 0