Відповіді:
З xargs
посібника:
Якщо ви хочете, щоб вхідний аргумент містив пробіли або горизонтальні вкладки, додайте їх у подвійні лапки або апострофи. Якщо аргумент містить подвійний символ цитати (
"
), ви повинні вкласти аргумент в апострофи. І навпаки, якщо аргумент містить апостроф ('
), ви повинні вкласти аргумент у подвійні лапки. Ви також можете поставити зворотну косу рису (\
) перед символом, щоб сказати xargs проігнорувати будь-яке особливе значення, яке може мати символ (наприклад, символи пробілу чи лапки).
Це означає, що ви можете уникнути цитат, якщо цитати самі:
$ echo "/Place/=\'http://www.google.com\'" | xargs echo
/Place/='http://www.google.com'
буде працювати, але echo /Place/=\'http://www.google.com\' | xargs echo
не буде.
"/Place/='http://www.google.com'"
, як я можу правильно його уникнути?
якщо ви хочете , xargs
щоб ігнорувати цитує одну з хорошою soultion може бути використання xargs
прапора xargs -0
Прямо з сторінки Man OPTIONS
ВАРІАНТИ -0, --нуло
Елементи введення закінчуються нульовим символом замість пробілу, а лапки та зворотна риса не є спеціальними (кожен символ приймається буквально). Вимикає кінець рядка файлу, який трактується як і будь-який інший аргумент. Корисно, коли елементи введення можуть містити пробіл, лапки або зворотні риси. Опція GNU find -print0 виробляє вхід, відповідний для цього режиму.
Я перевірив у системі GNU, що встановлення роздільника на певне значення (наприклад, новий рядок) з -d
опцією (а не лише -0
) також призведе xargs
до того, щоб не ставитись до лапок тощо спеціально:
-bash-4.3$ { echo "a'b'c"; echo d; } | xargs -d$'\n' echo
a'b'c d
-bash-4.3$ rpm -qf "$(which xargs)"
findutils-4.6.0.0.99.11a05-alt1.x86_64
-bash-4.3$ { echo "a'b'c"; echo d; } | xargs echo
abc d
-bash-4.3$
Ви можете використовувати GNU Parallel замість цього:
$ echo "/Place/='http://www.google.com'" | parallel echo
/Place/='http://www.google.com'
Тоді вам не доведеться робити цитування самостійно.
Докладніше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Я знайшов інше рішення на сторінці вручну: чітко вказати роздільник як "\ n". Це вимикає спеціальну обробку котирувань:
--delimiter = делім, -d delim
Елементи введення закінчуються вказаним символом. Зазначений роздільник може бути одним символом, символом втечі символу С, таким як \ n, або восьмий або шістнадцятковий код втечі. Октальні та шістнадцяткові коди втечі розуміються як для команди printf. Багатобайтові символи не підтримуються. При обробці вхідних даних котирування та зворотна риса не є особливими; кожен символ у введенні приймається буквально.
Так,
echo "/Place/='http://www.google.com'" | xargs -d'\n' echo
виходи
/Place/='http://www.google.com'
xargs
або сумісний
ksh93
$'...'
оператора цитування, який не знайдеться в кожній реалізації оболонки.
Тут я знайшов інше рішення /programming//a/17468560/1795821, яке пропонує використовувати sed
для виходу з лапок.
Наприклад:
sh-3.2$ echo "/Place/='http://www.google.com'" | sed "s/\'/\\\'/g" | xargs echo
/Place/='http://www.google.com'
xargs
розглядає котирування та зворотні риси, зокрема, як частину специфікацій . Опублікуйте те, що ви намагаєтеся зробитиxargs
замість цього.