Как bahamat сказал, Монетным двором является полученный Debian, таким образом, Вы должны
обновите Ваш sources.list
:
sudo gedit/etc/apt/sources.list
Изменение 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
Пакеты обновления:
склонные sudo - получают обновление
Обновление и распределение обновления:
склонные sudo - добираются, dist-обновление sudo склонный - получают обновление
Вымыться
склонные sudo - добираются, авточистая sudo Кв. - добираются, автоудаляют
Перезагрузка
перезагрузка sudo
После перезагрузки выбора требовал настольной среды.
Я считаю, что это делает то, что вы хотите. Он поставит все аргументы в одну строку, разделенную пробелами, с одним цитатами вокруг всех:
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'
Это легче, чем вы думаете:
#!/bin/bash
array="${@}"
echo $array
Chmod + X, что и запустить его:
$ ./example.sh --foo bar -b az
--foo bar -b az
обновление 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 под-вопроса:
Во-первых,объединить массив в строку,
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.
В то время как использование *
сгруппирует весь массив в один единственный аргумент во время раскрытия.