Например, если я хочу переименовать файл old_name
new_name
, я могу использовать следующий код:
args='old_name new_name'
mv $args
Однако, если исходное имя файла old name
, ни один из следующих кодов не сможет работать должным образом:
args='"old name" new_name'
mv $args
# mv: target 'new_name' is not a directory
args='old\ name new_name'
mv $args
# mv: target 'new_name' is not a directory
new_name
распознается как третий аргумент. Кажется, что такие символы, как "
и \
, теряют свое особое значение после расширения из строки.
Как правильно передать строку с пробелами в качестве отдельных аргументов командной строки? В этом случае есть ли способ указать, что old
и name
должны быть сгруппированы вместе?
Спасибо!
Резюме: вы должны использовать массив, как в args=('old name' new_name)
, а затем mv "${args[@]}"
. Подобных вопросов много.
Как этот: stackoverflow.com/questions/36129045/…
Спасибо @BenjaminW. ! Жаль, что я не нашел это, но я не придумал хороший способ описать свой вопрос...
Массивы были добавлены в язык именно для этого варианта использования (а не в качестве универсального контейнера):
args=("old name" "new name")
mv "${args[@]}"
Актуально: БашFAQ/050