Присоединение к аргументам удара в единственную строку с пробелами

Как bahamat сказал, Монетным двором является полученный Debian, таким образом, Вы должны

  1. обновите Ваш sources.list:

    sudo gedit/etc/apt/sources.list

  2. Изменение maya кому: nadia и precise кому: quantal:

Вставьте это в sources.list:

deb http://packages.linuxmint.com/ nadia main upstream import
deb http://archive.ubuntu.com/ubuntu/ quantal main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ quantal-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ quantal-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu/ quantal partner
deb http://packages.medibuntu.org/ quantal free non-free
#deb http://archive.getdeb.net/ubuntu quantal-getdeb apps
#deb http://archive.getdeb.net/ubuntu quantal-getdeb games
  1. Пакеты обновления:

    склонные sudo - получают обновление

  2. Обновление и распределение обновления:

    склонные sudo - добираются, dist-обновление sudo склонный - получают обновление

  3. Вымыться

    склонные sudo - добираются, авточистая sudo Кв. - добираются, автоудаляют

  4. Перезагрузка

    перезагрузка sudo

  5. После перезагрузки выбора требовал настольной среды.

42
22.04.2015, 05:25
3 ответа

Я считаю, что это делает то, что вы хотите. Он поставит все аргументы в одну строку, разделенную пробелами, с одним цитатами вокруг всех:

str="'$*'"

$ * производит все аргументы скриптов, разделенные первым символом $ IFS , которые, по умолчанию, это пространство.

Внутри двойной цитируемой строки нет необходимости избежать одного цитата.

Пример

Давайте поставьте вышеупомянутую в файле скрипта:

$ cat script.sh 
#!/bin/sh
str="'$*'"
echo "$str"

Теперь запустите скрипт аргументами образцов:

$ sh script.sh one two three four 5
'one two three four 5'

Этот скрипт является POSIX. Это будет работать с Bash , но он не требует Bash .

Вариация: объединение с скольжениями вместо пробелов

Мы можем измениться от пробелов к другому символу, регулируя IFS :

$ cat script.sh 
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old

, например:

$ sh script.sh one two three four       
'one/two/three/four'
61
27.01.2020, 19:35

Это легче, чем вы думаете:

#!/bin/bash
array="${@}"

echo $array

Chmod + X, что и запустить его:

$ ./example.sh --foo bar -b az 
--foo bar -b az
5
27.01.2020, 19:35

обновление Tl;dr, используйте

"'${array[*]}'"

Чтобы было ясно, я не собираюсь повторять этот ответ . Я только что обнаружил, что есть небольшие различия в использовании @и *для разыменования всех значений из массива.

Под капотом $*и $@все массивы, ссылающиеся на список argv.

Из вопроса,

I'm trying to join all of the arguments to a Bash function into one single string with spaces separating each argument.

В нем есть 2 под-вопроса:

  1. объединить массив входных аргументов в строку.
  2. передать объединенную строку в качестве единственного аргумента для функции оболочки.

Во-первых,объединить массив в строку,

array=("$@")
str="'${array[@]}'"
# or
str="'${array[*]}'"
# or
str=\'"${array[*]}"\'

Во-вторых, когда вы передаете strфункции, давайте подсчитаем количество аргументов, полученных функцией,

#!/usr/bin/env bash

arr=(a b c d)

function count_args() {
  echo '$#' $#
}

count_args "'${arr[@]}'"
count_args \'"${arr[@]}"\'
count_args "'${arr[*]}'"
count_args \'"${arr[*]}"\'

вывод

$# 4
$# 4
$# 1
$# 1

только arr[*]оборачивает массив в 1 аргумент для функции оболочки, почему?

Процитируйте из Как использовать массивы в скрипте bash , который мне показался полезным,

echo ${array[*]}
echo ${array[@]}

Both syntax let us access all the values of the array and produce the same results, unless the expansion it's quoted. In this case a difference arises: in the first case, when using @, the expansion will result in a word for each element of the array.

В то время как использование *сгруппирует весь массив в один единственный аргумент во время раскрытия.

3
27.01.2020, 19:35

Теги

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