Заменить echo="$folder"
наecho "$folder"
То же дляecho="$input"
Здесь эхо действует как переменная. =
попытается присвоить ему значение, а не выполнить команду echo
самостоятельно. Если после echo="$folder"
вы запустите echo $echo
, вы получите значение pwd
.
Воспроизведение вашего результата;
/home/test$ folder="$PWD"
/home/test$ echo="$folder"
/home/test$ echo "$echo"
/home/test
Ответ Фредди работает, но не имеет объяснения . Формат sed
, к которому вы, вероятно, стремитесь, выглядит примерно так:
sed -n 4,6p file1.txt
Где я использовал 4
и 6
как фиктивные числа.
Давайте рассмотрим ваше выражение, снова используя эти фиктивные числа и команду echo
.
$ var1=4
$ var2=6
$ echo "$var1,$var2'p'"
4,6'p'
Поскольку вы заключили '
в "
, они интерпретируются буквально, а вы буквальные '
в команде sed. Следовательно, когда вы пытаетесь запустить свою команду:
$ sed -n "$var1,$var2'p'" file1.txt
sed: -e expression #1, char 4: unknown command: `''
Вы можете удалить '
из своего выражения, но вместо этого имя переменной изменится на $var2p
. Следовательно, как предлагает Фредди, вы можете использовать {…}
для явного включения имени переменной (s ). то есть
sed -n "${var1},${var2}p" file1.txt
Вы можете проверить, работает ли это, поставив эхо перед командой. Альтернативный формат:
sed -n "$var1,$var2"p file1.txt
но ИМО менее читабелен.
Наконец, как SteelDriver указывает , если вы хотите добавить в файл, используйте >> file2.txt
вместо > file2.txt
.
Используйте фигурные скобки вокруг имен ваших переменных:
sed -n "${var1},${var2}p" file1.txt > file2.txt
Скобки вокруг первой переменной не нужны, но лучше сделать ее согласованной.