Заключение в кавычки и выход

В то время как это верно, что все основанные на флэш-памяти устройства хранения имеют ограниченное количество записей, прежде чем транзисторная изоляция сломается, это не настолько плохо, как это было, когда SSD были несколько первых представленные годы назад.

В основном вследствие того, что износ работы самого современного SSD, выравнивающийся и, основан на NandFlash, горящий через диск не проблема как он, раньше был.

Вы не должны должны быть волноваться об этом. SSD с постоянными записями все еще переживет любой ротационный жесткий диск.

Ресурсы

http://www.storagesearch.com/ssdmyths-endurance.html

http://maxschireson.com/2011/04/21/debunking-ssd-lifespan-and-random-write-performance-concerns/

http://www.tomshardware.com/forum/267303-32-what-write-limit-ssds

3
26.02.2014, 05:09
5 ответов
[116513] Вы должны использовать вот так:

или обернуть его в [116894] единственную кавычку[116895]:

set transparency=20

Тест:

Выход:

Обновление

enter image description here

Проблема здесь в том, что вы вызываете [116898]perl[116899] с [116900]$1[116901], [116902]$1[116903] содержит пробел белого цвета, поэтому perl будет воспринимать его как три отдельных аргумента.

enter image description here

Чтобы предотвратить это, необходимо обернуть [116904]$1[116905] в двойные кавычки [116906] "$1"[116907].

  • Другая заметка: вы должны обрабатывать аргумент [116908]$1[116909] в perl скрипте, потому что если [116910]$1[116911] содержит какие-либо специальные символы, это приведет к некоторым ошибкам в perl программе. Вы можете использовать [116912]quotemeta($ARGV[0])[116913].
  • Замечание

Я думаю, что вы не должны передавать все аргументы как строку в скрипт оболочки. Вы должны передавать их как обычно, кроме имени кластера, вы все равно должны обернуть его как строку. Затем передайте их скрипту perl с помощью [116916] "$@"[116917] вместо [116918]$1[116919].[116532].

3
27.01.2020, 21:10
[117858]У меня небольшие трудности с отслеживанием вашего вопроса, и я думаю, что и ваша конкретная проблема, и странная формулировка вопроса происходят от одного и того же корня, который является неправильной моделью разбора аргументов команды.[12168]Команда получает не строку в качестве аргумента, а список строк. Все кавычки выполняются оболочкой.[12169]Если вы выполняете любую из следующих команд оболочки [12170] (или множество вариантов), то команда выполняется с точно такими же аргументами во всех случаях:[12171]аргумент 0 - [118431]mycommand[118432];[12172]аргумент 1 - 7-символьная строка [118433]foo bar[118434];[12173]аргумент 2 - 6-символьная строка [118435]wibble[118436]. [12174] Конструкция оболочки [118247]1[118248] не означает "принять значение параметра 1". Она означает "взять значение параметра 1, разделить его на отрезки, разделенные пробелами, и интерпретировать каждый отрезок как шаблон подстановки и заменить его именами соответствующих файлов". Да, это довольно многословно. В качестве общего принципа программирования оболочки, [118249] всегда ставим двойные кавычки вокруг подстановок переменных и командных susbtitutions[118250]: [118251] "$1" [118252], [118253] "$some_variable" [118254], [118255] "$(some_command)" [118256]. [12175] Здесь два неправильных варианта делают правое дело, но только в узком случае: вы передаете один аргумент в скрипт оболочки, и разбиваете его на части, разделенные пробелами, чтобы превратить в список строк для передачи в качестве аргументов в Perl-скрипт. Это неинтуитивно понятный и ограниченный интерфейс. Он не позволяет вам иметь пробелы в аргументах для Perl скрипта, так как пробелы уже используются для разделения аргументов. Вы не можете иметь его в обоих вариантах. Здесь кавычки не помогут: вы можете передать символ кавычек в аргументе в скрипт оболочки, и он станет частью аргумента в Perl-скрипте. Например, если вы запустите один из[12176], то скрипт оболочки будет вызван с одним аргументом [118257]-C "Test Internal Cluster"[118258], а Perl скрипт будет вызван с 4 аргументами [118259]-C[118260], [118261] "Test[118262], [118263]Internal[118264] и [118265]Cluster"[118266].[12177]Исправление простое, но оно требует изменения соглашения о вызове для скрипта оболочки. То, что у вас теперь есть - это ошибка, вам нужно ее исправить. Вызовите скрипт обычным способом:[12178](последние две эквивалентны, так как одинарные и двойные кавычки имеют значение только при появлении [118267]\$`[118268] внутри7), и исправьте скрипт оболочки, чтобы он использовал двойные кавычки вокруг командных подстановок.[12179]Я заменил код awk эквивалентными конструкциями оболочки, предполагая, что выводится только одна строка.[117879].
3
27.01.2020, 21:10
[116551]Проблема в следующей строке:
  • Нужно процитировать аргумент:
  • Когда вы не процитируете переменную, разделение слов приводит к тому, что perl видит несколько аргументов.[116556].
  • 2
    27.01.2020, 21:10
    [116563] Проблема, на самом деле, в том, что вы должны делать правильный разбор опций. Похоже, что вы не знаете как, но в этом нет ничего постыдного.

    Использование встроенного в [116956]bash[116957] парсинга опций, и правильное их цитирование по пути, заставит все работать так, как вы хотите, а это значит, что вы можете цитировать их нормально в командной строке. Не нужно ничего цитировать или экранировать.

    Это выглядит так, как будто вы делаете какие-то другие вещи с выводом, который я оставлю вам в приложении к этому примеру.[116568].

    1
    27.01.2020, 21:10
    [116569] Проблема в том, что вы пытаетесь использовать одну переменную для хранения списка строк:

    У меня есть скрипт оболочки, аргументы которых собираются в кавычки в виде одного аргумента и передаются в скрипт на perl.

    Это не работает. Как только вы соединяете несколько аргументов и получаете одну строку, разница между пробелами [116960]в аргументах[116961] и [116962]пробелами в аргументах[116963] теряется. Нет способа исправить это, включив символы в кавычки внутри строки, потому что, проще говоря, символы в кавычках теряют свою магию, как только они становятся частью строки. Обратный слеш или [116964]"[116965] внутри строки - это обычный символ; он ничего не заключает в кавычки.

    Решение: Используйте переменную массива для сбора аргументов:

    (кавычки из примечаний. )

    1. Конечно, если аргументы, которые вы хотите передать программе perl - это просто [116966]все[116967] аргументы командной строки, которые передаются вашему скрипту, то они уже содержатся в массиве (а именно в списке аргументов командной строки [116968] "$@"[116969]), поэтому вы можете просто использовать этот:
    1
    27.01.2020, 21:10

    Теги

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