как я могу создать имя файла, начинающееся с "

Я хочу создать файл с таким именем:

"\?$*'Helloword'*$?\"

Я пытался с помощью этой команды, но результат неверный

touch \"\\\?\$\*\'\Helloword\'\*\$\?\\\"
0
задан 30 April 2021 в 05:59

1 ответ

Вы не упомянули, какая оболочка, но я предполагаю bash . Что ж, поздравляю! Строка в кавычках / экранировании, которую вы используете, на самом деле правильная .

Так почему вы думали, что это неправильно? Вы не показали свой вывод или то, как вы его получили, но я также предполагаю, что вы использовали ls (это естественно).

ls возвращает '"\? $ *' \ '' Helloword '\' '* $? \"' . Но на самом деле это просто еще одна цитируемая / экранированная форма того, о чем вы просите, "\? $ * 'Helloword' * $? \" .

Хотите / нужно доказательство?

Сначала сделайте еще один , коснувшись , но на этот раз используя форму, которую показывает вам ls :

touch '"\?$*'\''Helloword'\''*$?\"'

Теперь сделайте еще одно ls . По-прежнему там только один файл, верно?

'"\? $ *' \ '' Helloword '\' '* $? \"' == "\? $ * 'Helloword' * $? \ "

Кроме того, exa , современная замена для ls , написанная на Rust, возвращает форму, с которой вы начали:

> exa -l \"*
.rw-r--r-- 0 username 30 Apr  1:35 "\?$*'Helloword'*$?\"

Но вам не нужно установите exa , чтобы убедиться в этом. Гораздо более простую замену ls можно получить с помощью:

> echo \"*
"\?$*'Helloword'*$?\"

Замечание:

Иногда мне легче поэтапно создавать сложные кавычки / экранирование. Например:

> filename=Helloword
> filename="'$filename'"
> filename=\*$filename\*
> filename=\$$filename\$
> filename=\?$filename\?
> filename=\\$filename\\
> filename=\"$filename\"
> echo $filename
"\?$*'Helloword'*$?\"
> touch $filename

Конечно, вы можете повторить переменную на любом этапе, чтобы убедиться, что вы на правильном пути.

2
ответ дан 7 May 2021 в 17:42

Другие вопросы по тегам:

Похожие вопросы: