Внутри моего простого скрипта на awk я вызываю системную команду

#!/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);    }'

Проблема в ошибке с ()

$./ Testhere.sh

/home/software/ другое / new (апплет)/home/software/ другое / new (апплет)

Это тест / домашний / софт / другое / новый (апплет)

sh: -c: строка 0: синтаксическая ошибка рядом с неожиданным токеном (' sh: -c: line 0: ls /home /software /Other /new (Applet)'

Когда я изменил деталь так, что команда передается в виде строки

                               command= "ls new (Applet)"

                               system (command);

Я получаю похожие ошибки:

$ ./testhere.sh

/home/software/ другое / new (апплет)

/home/software/ другое / new (апплет)

Это тест / домашний / софт / другое / новый (апплет)

sh: -c: строка 0: синтаксическая ошибка рядом с неожиданным токеном (' sh: -c: line 0: ls new (апплет)'

Как мне обойти это?

1 ответ1

2

Вы должны заключить в кавычки ("или") слово, в котором есть пробелы для оболочки, реализующей вызов system() в awk: например:

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

или же

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .