Bash-скрипт: Передача переменной в bash-скрипт, содержащий кавычки, одинарные кавычки и т. д.

Bash-скрипт: Передача переменной в bash-скрипт, содержащий кавычки, одинарные кавычки и т. д.

Предположим, что это строка:

   '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 КБ. Если ваш файл всегда будет небольшим, вам не о чем беспокоиться, но в противном случае вам следует попробовать другой способ добавления данных в скрипт.

Связанный контент