Подтвердить что ты не робот

Shell - записать содержимое переменной в файл

Я хотел бы скопировать содержимое переменной (здесь называется var) в файл.

Имя файла сохраняется в другой переменной destfile.

У меня проблемы с этим. Вот что я пробовал:

cp $var $destfile

Я тоже пробовал то же самое с командой dd... Очевидно, оболочка считала, что $var ссылается на каталог, и поэтому мне сказали, что каталог не найден.

Как мне обойти это?

4b9b3361

Ответ 1

Используйте команду echo:

var="text to append";
destdir=/some/directory/path/filename

if [ -f "$destdir" ]
then 
    echo "$var" > "$destdir"
fi

Тест if показывает, что $destdir представляет файл.

> добавляет текст после обрезания файла. Если вы хотите добавить текст в $var к существующему содержимому файла, вместо этого используйте >>:

echo "$var" >> "$destdir"

Команда cp используется для копирования файлов (в файлы), а не для записи текста в файл.

Ответ 2

echo проблема в том, что если var содержит что-то вроде -e, это будет интерпретироваться как флаг. Другой вариант - printf, но printf "$var" > "$destdir" расширит все экранированные символы в переменной, поэтому, если переменная содержит обратную косую черту, содержимое файла не будет совпадать. Однако, поскольку printf интерпретирует только обратные слэши как экранированные символы в строке формата, вы можете использовать спецификатор формата %s для сохранения точного содержимого переменной в файле назначения:

printf "%s" "$var" > "$destdir"

Ответ 3

Если я вас правильно понял, вы хотите скопировать $var в файл (если это строка).

echo $var > $destdir

Ответ 4

Ни один из ответов выше не работает, если ваша переменная:

  • начинается с -e
  • начинается с -n
  • начинается с -e
  • содержит \ за которым следует n
  • после него не должно быть добавлено дополнительного символа новой строки

и поэтому на них нельзя положиться для произвольного содержимого строки.

В bash вы можете использовать "здесь строки" как:

cat <<< "$var" > "$destdir"

Ответ 5

Когда вы говорите "скопируйте содержимое переменной", содержит ли эта переменная имя файла или содержит имя файла?

Я предполагаю по вашему вопросу, что $var содержит содержимое, которое вы хотите скопировать в файл:

$ echo "$var" > "$destdir"

Это будет отражать значение $var в файле с именем $destdir. Обратите внимание на цитаты. Очень важно иметь "$ var", заключенный в кавычки. Также для "$ destdir", если в названии есть пробел. Чтобы добавить его:

$ echo "$var" >> "$destdir"