Для моего назидания я хотел бы узнать, как избежать кавычек в команде system
в следующем perl oneliner:
$ ls -p | grep -v / | perl -lane 'system("echo \"$_\"");'
без использования escape-последовательности \"
, как показано здесь: https://stackoverflow.com/a/1250279/3367247
(Очевидно, что эта команда не делает ничего полезного; она просто печатает имена файлов, в которых есть пробелы. Но она служит для краткого объяснения моей проблемы.)
Я попробовал следующее (извините за изображения, но мне показалось, что проще всего расшифровать цитату):
Код: $ ls -p | grep -v / | perl -lane 'system("echo ''"''$_''"''");'
Код: $ ls -p | grep -v / | perl -lane 'system('"'"'echo "$_"'"'"');'
Ни один из них не работает. Есть ли способ сделать это в виде связанного ответа?
EDIT: мне нужны двойные кавычки вокруг $_
в команде echo, потому что строка в $_
содержит круглые скобки, а не потому, что она содержит пробелы, как я изначально думал.
system('/bin/echo', $_)
-- perldoc.perl.org/functions/system.html - person glenn jackman   schedule 28.03.2019system
со списком, спасибо. - person dqbydt   schedule 28.03.2019... | perl -lane 'system("echo ''\"''$_''\"''")'
(сравните с исходным примером, обратная косая черта не является частью синтаксиса оболочки, а является частью строки аргумента perl, переданнойsystem
) - person Håkon Hægland   schedule 28.03.2019$_
является переменной perl и требует интерполяции двойных кавычек в строку. - person Håkon Hægland   schedule 28.03.2019