Ubuntu. Не выполняется "rename" внутри "bash-скрипта" при передаче параметра при запуске
Помогите пожалуйста советом. Ситуация следующая... Имеется файл script.sh:
#!/bin/bash
rename 's/(?<=x001x).*/8888888888888888.php/' /var/www/html/*.php
Задача этого файла, найти в директории "/var/www/html/" все файлы с расширением .php. Среди этих файлов определить тот, имя которого начинается с "x001x" и изменить текст после символов "x001x" на "8888888888888888.php"
При запуске файла из консоли в таком формате: sudo bash script.sh - все отрабатывает нормально. Но возникла необходимость запускать файл script.sh с параметром который будет передан внутрь "конструкции" rename для замены части строки 8888888888888888 на данные которые будут переданы "параметром".
В таком формате (часть строки "8888888888888888" заменена на $1) :
#!/bin/bash
rename 's/(?<=x001x).*/$1.php/' /var/www/html/*.php
Но при запуске: sudo bash 1change.sh 99999999999
Получаю ошибку: Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
Я уже пробовал передавать параметр $1 в переменную внутри скрипта, например VAR=$1 и потом добавлять переменную $VAR в скрипт. Пробовал конкатенировать тело скрипта из 3 переменных в одну строку. Но заставить работать конструкцию rename так и не получилось. Есть мнение что это связано с этой реализацией rename регулярное выражение которое реализовано через перл по этому и не получается передать переменную. Подскажите пожалуйста есть ли решение в этой ситуации? Спасибо.
Ответы (1 шт):
Интерполяция не работает в единичных кавычках. Используйте двойные, либо катенируйте строки.