Как записать arg в файл?

Я пытаюсь записать некоторый контент в файл и в то же время изменить некоторые значения, которые будут передаваться через аргументы.

Я последовал этому ответу Создание файла с некоторым содержанием в сценариях оболочки

cat > filename <<- "EOF"
File contents
More contents
EOF

Итак, скажем, когда я запускаю скрипт так:

./script Abraham

и я хочу написать внутри файла что-то вроде:

Hello Abraham
More contents, etc...

Я пришел из фона Javascript, поэтому я пытался что-то вроде:

`Hello ${1}, etc...`

но то, что я получал внутри файла, было:

Hello $1
More contents, etc...

потому что не позволяет мне установить переменную аргумента. Так как я могу это сделать? Заранее спасибо.

1 ответ

Цитаты вокруг начального "EOF" предотвратить расширение переменной. Чтобы использовать переменные в тексте heredoc, вам нужен разделитель без кавычек:

cat > filename <<- EOF
Hello $1
More contents, etc...
EOF

Но тогда вам придется быть осторожным с синтаксисом оболочки в остальной части содержимого.

Другой вариант - написать эту строку отдельно и записать фиксированное содержимое, используя heredoc:

echo "Hello $1" > filename
cat >> filename <<- "EOF"
More contents, etc...
EOF

Обратите внимание на использование >> для добавления после первоначальной записи.

Другие вопросы по тегам