Одинарные кавычки и переменные внутри оболочки Bourne

Одинарные кавычки и переменные внутри оболочки Bourne

У меня есть команда, которую я пытаюсь выполнить в оболочке Bourne для Solaris 9.

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

Моя проблема в том, что переменная ${PARSEDATA}не работает должным образом. Я пробовал использовать двойные кавычки вокруг нее, но проблема в $0имени скрипта, выполняющего этот код, а не в файле, найденном с помощью findкоманды.

Любые предложения по решению этой, возможно, простой проблемы, будут весьма полезны.

Заранее спасибо.

Обновлять: $0- это имя скрипта, найденного с помощью findкоманды, переменная for ${PARSEDATA}- это фильтр, расположенный где-то в системе, который изменяет вывод каждого найденного скрипта. Однако проблема в том, что я не могу получить и то, и другое $0и ${PARSEDATA}правильно развернуть, либо $0разворачивается нормально с помощью одинарных кавычек, либо с помощью двойных кавычек ${PARSEDATA}разворачивается нормально, но затем $0становится именем исходного скрипта, который запускает эту find-команду.

решение1

Я не уверен, что вы пытаетесь сделать? Но если вы хотите найти скрипты с именем check_*, а затем запустить их и передать через программу ${PARSE_DATA}, ну, я думаю, файл, найденный find, не является, $0но{}

Пример

find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \; (Википедия)

Поэтому я думаю, вы можете использовать двойные кавычки:

find ${DATADIR} -name "check_*" -type f -exec sh -c '{} | ${PARSEDATA}' \; >> ${TMP_1}

Я успешно попробовал:

PG='sed s/Blah/Bleh/'
find . -name "check_*" -type f -exec sh -c "{} | $PG" \;

> Bleh Blah

решение2

Сохраните одинарные кавычки, проблема, скорее всего, в том, что вы не экспортировали переменную PARSEDATA.

export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

решение3

Если вы хотите, чтобы $0 не раскрывался оболочкой (используя одинарные кавычки), а ${PARSEDATA} раскрывался, то почему бы просто не использовать разные кавычки для каждого:

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}

Пока вы сохраняете объединёнными кавычки, оболочка просто расширит ${PARSEDATA} и передаст всю команду как один токен для поиска.

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