sed, чтобы вставить все необходимые escape-последовательности bash в путь к файлу

Как и сказал doneal24, вам, вероятно, нужно идти bc.

Добавьте следующее в файл с именем fact.bc:

define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);
}

Теперь вы можете вызвать его в bc, предоставив файл :Например.

$>bc fact.bc <<< "scale=50;f(200)"
78865786736479050355236321393218506229513597768717326329474253324435\
94499634033429203042840119846239041772121389196388302576427902426371\
05061926624952829931113462857270763317237396988943922445621451664240\
25403329186413122742829485327752424240757390324032125740557956866022\
60319041703240623517008587961789222227896237038973747200000000000000\
00000000000000000000000000000000000
0
23.11.2020, 14:29
1 ответ

printf '%q\n' 'My Books/Pride & Prejudice.pdf' даст желаемый результат. Вы можете использовать шаблон глобуса, например, printf '%q\n' *, чтобы получить результаты для нескольких файлов.

В зависимости от варианта использования вы можете использовать комбинацию find+execвместо экранирования. Например, find -type f -name '*.txt' -exec cat {} +правильно передаст совпадающие имена файлов команде cat.

Еще один вариант: при условии, что имя вашего файла не содержит неприятных символов, таких как одинарные кавычки и перевод строки, вы можете вручную заключить имя файла в одинарные кавычки и передать его другой команде. Например:ls -l 'My Books/Pride & Prejudice.pdf'

2
18.03.2021, 22:47

Теги

Похожие вопросы