Сохранение пробелов в строке как параметр командной строки

Если бы Вы довольно довольны MSBuild, то я придерживался бы MSBuild. Это может быть одним из тех случаев, где инструмент, который Вы изучаете сначала, является тем, Вы предпочтете. Я запустил с NAnt и не могу вполне привыкнуть к MSBuild. Я уверен, что они оба будут вокруг в течение достаточно долгого времени.

существуют некоторые принципиальные различия между этими двумя, вероятно, лучше всего выделенными этот разговор между некоторыми вентиляторами NAnt и Microsoftie.

Интересно, Jeremy Miller задал вопрос полной противоположности на его блоге в прошлом году.

7
задан Lance Roberts 29 June 2010 в 19:33
поделиться

3 ответа

Вы столкнулись с этой проблемой, потому что вы сохраняете команду в переменной, а затем расширяете ее; если для этого нет веской причины, не делайте этого :

sudo time $BLACKRAY_BIN_PATH/blackray_loader -c $BLACKRAY_LOADER_DEF_PATH/$BLACKRAY_LOADER_DEF_NAME -d $BLACKRAY_CSV_PATH -e "$BLACKRAY_END_POINT" -a $OUT_FILE

Если вам действительно нужно сохранить команду и использовать ее позже, есть несколько вариантов; в вики bash-hackers.org есть хорошая страница по этой теме . Мне кажется, что наиболее полезным здесь является поместить команду в массив, а не в простую переменную:

BLACKRAY_INDEX_CMD=($BLACKRAY_BIN_PATH/blackray_loader -c $BLACKRAY_LOADER_DEF_PATH/$BLACKRAY_LOADER_DEF_NAME -d $BLACKRAY_CSV_PATH -e "$BLACKRAY_END_POINT")

sudo time "${BLACKRAY_INDEX_CMD[@]}" -a $OUT_FILE

Это позволяет избежать путаницы между словами-разделителями и пробелами в словах, потому что слова не разделены пробелами - они находятся в отдельных элементах массива.

5
ответ дан 7 December 2019 в 03:18
поделиться

Да. Вам необходимо использовать вариант размещения оператора new (). Например:

void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;

Обратите внимание, что при размещении new исключение не возникает.

в качестве имени файла в дополнение к "test.txt". Кроме того, echo отбрасывает лишние пробелы.

Когда параметр цитируется, как во втором разделе, grep рассматривает его как один аргумент (включая лишние пробелы) и обрабатывает это правильно. А echo сохранил лишние пробелы.

Я использовал лишние пробелы, кстати, просто для помощи в демонстрации.

2
ответ дан 7 December 2019 в 03:18
поделиться

возможно, вам нужно заключить аргумент в двойные кавычки (например, «$ {6}»).

После комментария OP он должен быть «$ BLACKRAY_END_POINT»

1
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

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