Оболочка-запись содержимого переменной в файл


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

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

у меня возникли проблемы, делая это. Вот что я пробовал:

cp $var $destfile

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

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

5 51

5 ответов:

использовать :

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

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

The if тесты $destdir представляет собой файл.

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

echo "$var" >> "$destdir"

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

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

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

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

echo $var > $destdir

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

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

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

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

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

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

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

$ echo "$var" > "$destdir"

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

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