3

Мне интересно, почему мой простой скрипт не работает:

#!/usr/bin/env bash
user_variable='$1'
echo "export USER_VAR=$user_variable" > ~$user_variable/.filename

Когда я запускаю скрипт, у меня появляется эта ошибка:

./script.sh admin: line 3: ~admin/.filename: No such file or directory 

Конечно, каталог для ~ admin существует:

~ # cd ~admin
/share/homes/admin #

И если я тестирую этот вид команды непосредственно в командной строке, она работает:

# echo "test" > ~admin/.filetest
#

Так почему моя команда echo не работает в файле сценария?

Спасибо.

2 ответа2

4

Из bash(1):

Порядок расширений: расширение фигурных скобок, расширение тильды, расширение параметров, переменных и арифметики и подстановка команд (выполняется слева направо), разбиение слов и расширение имени пути.

То есть он выполняет раскрытие тильды до раскрытия переменной, поэтому он не заменяет $user_variable на $1 (который, как я полагаю, равен « admin ») до тех пор, пока он не попытается и не сможет обработать ~ - потому что ищет пользователя с именем « $user_variable », а не с именем « admin ».

0

Упорядочение расширений здесь не мешает вам использовать переменную в соответствии с вашим первоначальным намерением. Обычно eval может помочь, когда дело доходит до динамических команд.

eval "echo \" export USER_VAR = $ user_variable \"> ~ $ user_variable/.filename"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .