
Внутри моего простого скрипта 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/Other/new (Апплет) /home/software/Other/new (Апплет)
Это тест /home/software/Other/new (Апплет)
sh: -c: строка 0: синтаксическая ошибка около неожиданного токена (' sh: -c: line 0:
ls /home/software/Other/new (Applet)'
Когда я изменил часть так, чтобы команда передавалась как строка
command= "ls new (Applet)"
system (command);
Я получаю похожие ошибки:
$ ./testhere.sh
/home/software/Другое/новый (Апплет)
/home/software/Другое/новый (Апплет)
Это тест /home/software/Other/new (Апплет)
sh: -c: строка 0: синтаксическая ошибка около неожиданного токена (' sh: -c: line 0:
ls new (Applet)'
Как это обойти?
решение1
Необходимо заключить в кавычки (с помощью "" или '') слово, содержащее пробелы, для оболочки, реализующей system()
вызов в awk, например:
system ("ls '" Test "'");
или
system ("ls \"" Test "\"");