Übergeben Sie einen Pfad mit Klammern und Leerzeichen im Systemaufruf im Awk-Skript

Übergeben Sie einen Pfad mit Klammern und Leerzeichen im Systemaufruf im Awk-Skript

In meinem einfachen Awk-Skript rufe ich den Systembefehl auf

#!/bin/bash
 Test='/home/software/Other/new (Applet)'
 ls "${Test}"

 var=$(ls "${Test}")
 echo $var
 awk  -vTest="$var" 'BEGIN  {

              #some code that works

               print "This is a test", Test
               #command= "ls new (Applet)"
               system ("ls " Test);    }'

Das Problem ist der Fehler mit den ()'s

$./testhere.sh

/home/software/Andere/neu (Applet) /home/software/Andere/neu (Applet)

Dies ist ein Test /home/software/Other/new (Applet)

sh: -c: Zeile 0: Syntaxfehler in der Nähe von unerwartetem Token (' sh: -c: line 0:ls /home/software/Other/new (Applet)'

Als ich den Teil so geändert habe, dass der Befehl als Zeichenfolge übergeben wird

                               command= "ls new (Applet)"

                               system (command);

Ich erhalte ähnliche Fehler:

$ ./testhere.sh

/home/software/Andere/neu (Applet)

/home/software/Andere/neu (Applet)

Dies ist ein Test /home/software/Other/new (Applet)

sh: -c: Zeile 0: Syntaxfehler in der Nähe von unerwartetem Token (' sh: -c: line 0:ls new (Applet)'

Wie kann ich das umgehen?

Antwort1

system()Sie müssen das Wort mit Leerzeichen in Anführungszeichen (mit "" oder '') setzen, für die Shell, die den Aufruf in awk implementiert : zB:

system ("ls '" Test "'"); 

oder

system ("ls \"" Test "\"");

verwandte Informationen