Shell - записать содержимое переменной в файл
Я хотел бы скопировать содержимое переменной (здесь называется var
) в файл.
Имя файла сохраняется в другой переменной destfile
.
У меня проблемы с этим. Вот что я пробовал:
cp $var $destfile
Я тоже пробовал то же самое с командой dd... Очевидно, оболочка считала, что $var
ссылается на каталог, и поэтому мне сказали, что каталог не найден.
Как мне обойти это?
Ответы
Ответ 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"
Ответ 6
Это может помочь
Использование переменной с командой cp в оболочке bash
Также см. этот Почему "cp" не работает в этой оболочке script?