Как сохранить пробел в аргументах Bash

4527
François ッ Vespa ت

Я использую команду:

cm1 cm2 arg1 arg2 'argument 3' 

Сначала он переходит к cm1, который затем перенаправляет arg1 arg2 'argument 3'в другой файл.

/usr/bin/cm1:

#! /bin/bash # some script here shift cm2 $@ 

/usr/bin/cm2:

echo $# # This returns 4 in lieu of 3 because the white space in 'argument 3' causes the argument to be split into two arguments. 

Итак, как я могу передать аргументы из одного скрипта в другой и убедиться, что пробел не будет читаться как разделитель аргументов?

2

1 ответ на вопрос

3
Der Hochstapler

Я предполагаю, что вы должны перевернуть его в кавычки, вот так:

#! /bin/bash # some script here shift cm2 "$@" 
Спасибо! Это работает на простом примере, который я привел. Теперь на реальном скрипте, который я пишу, и который имеет более сложный перенаправление, в какой-то момент аргументы нарушаются. Но это означает, что ошибка приходит откуда-то еще ... Спасибо! François ッ Vespa ت 12 лет назад 0
Может быть, вы позже разделите эти аргументы на основе IFS по умолчанию, значение по умолчанию которого равно «" Cougar 12 лет назад 0
Я искал противоположное поведение - как заставить мой скрипт перебирать аргументы, разделенные пробелами. В моем сценарии я цитировал ссылку ("$ @"), поэтому все аргументы обрабатывались как одна объединенная строка. Я заменил:> для пути в "$ @" <на:> для пути в $ @ <, и это сработало. Спасибо. mombip 5 лет назад 0

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