Предположим, что это строка:
'a',"b"
он содержит как одинарные, так и двойные кавычки.
как бы вы передали это в скрипт bash как одну строку?
это скрипт bash:
#!/bin/bash
echo $1
это должно отражаться
'a',"b"
но мы не можем предположить, что строка настолько мала. в конечном итоге я планирую отправить всю
/etc/httpd/conf/httpd.conf
как строку для этого bash-скрипта.
поэтому я не могу обойтись без кавычек и одинарных кавычек по одной.
решение1
Вы можете использоватьзамена команды:
oo.sh "$(cat /etc/httpd/conf/httpd.conf)"
Это запустится cat /etc/httpd/conf/httpd.conf
и поместит вывод (содержимое файла) в первый аргумент, заданный для oo.sh
. Он заключен в кавычки, поэтому передается как один аргумент — пробелы и специальные символы передаются нетронутыми. oo.sh
получает один аргумент.
В более широком смысле, однако, может быть лучше передать имя файла в скрипт, если это возможно, или предоставить содержимое файла в качестве стандартного ввода ( oo.sh < /etc/httpd/conf/httpd.conf
). Помимо того, что это более стандартно, есть максимальная длина всех аргументов командной строки, вместе взятых, и файл может быть длиннее. Даже если это работает сейчас, если этот файл может со временем стать больше, в конечном итоге передача всего этого как аргумента перестанет работать с ошибкой "arg list too long".
Вы можете найти этот предел с помощью getconf ARG_MAX
. Размер сильно варьируется: у меня есть системы с ограничениями в 2 МБ и 256 КБ. Если ваш файл всегда будет небольшим, вам не о чем беспокоиться, но в противном случае вам следует попробовать другой способ добавления данных в скрипт.