Я действительно не знаю, почему команды, которые Вы упомянули, перестанут работать, но Вы могли попробовать
> wordlist.txt
Это говорит оболочке усекать файл к 0 длинам, не порождая другой процесс.
Дополнительная пара кавычек была бы использована только дополнительным шагом оценки. Например, вызванный eval
:
bash-4.2$ VAR='echo "hi"'
bash-4.2$ $VAR
"hi"
bash-4.2$ eval $VAR
hi
Но обычно плохая идея поместить команды с параметрами в одной строке. Используйте массив вместо этого:
bash-4.2$ VAR=(echo "hi")
bash-4.2$ "${VAR[@]}"
hi
Удаление кавычки только происходит на исходных входных словах, не на результате расширений. Кавычки, которые являются частью расширенных переменных, являются нетронутыми.
Если Вы отступаете немного, Вы видите, почему подстановка переменных абсолютно должна сохранить кавычки.
Точка кавычек в оболочке Unix/Linux/BSD должна сохранить части строки вместе, которая иначе проанализировать как несколько строк. Так как по умолчанию пробел использования оболочки как маркерный разделитель, строка с пробелами (как "один два три"), если бы не заключенный в кавычки или завершенный так или иначе, проанализировать как 3 строки: "один", "два" и "три".
Если программист хочет строку со значением некоторой интерполированной переменной:
VAR=two
STRING="one $VAR three"
оболочка не должна абсолютно удалять кавычки: строка, содержащая пробелы, проанализировать как 3 меньших строки.
"$(ls)"
и'$(ls)'
. Это - причина, почему кавычки появляются в исходных примерах вопросов. – Joseph Kern 12.05.2012, 20:00printf '<%s> ' "${VAR[@]}"
покажет, что кавычки уже были удалены. Если Вы устанавливаете VAR какVAR=(echo \"hi\")
чтобы на самом деле иметь кавычки, та же проблема появляется снова,$ ${VAR[@]}
распечатает"hi"
– 17.01.2016, 08:10