Как установить переменную bash в составном операторе xargs - PullRequest
0 голосов
/ 25 июня 2018

Я ищу способ установить переменную в инструкциях, передаваемых в xargs.Значение должно быть изменено в одной из команд.Использование файла или другой утилиты является опцией, но я не уверен, почему установка переменной bash в последовательности всегда выглядит пустой.Я ожидал, что поведение будет примерно таким, но встроенным:

$ fname=codebase.txt; echo ${fname/txt/file}
 codebase.file

Спасибо.

1 Ответ

0 голосов
/ 25 июня 2018

Эта строка преобразует ${v1/txt/file} в значение до выполнения команды:

$  ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo ${v1/txt/file}"

А это значит, что bash -c даже не видит ${v1/txt/file}

В этой строке одинарные кавычки запрещают подстановку переменных, поэтому echo processing {}; v1={} && echo ${v1/txt/file} фактически передается bash -c в качестве параметра:

$  ls c*txt | xargs -i bash -c 'echo processing {}; v1={} && echo ${v1/txt/file}'

Вы можете сделать то же самое, избежав знака доллара:

$  ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo \${v1/txt/file}"
...