Я нашел ответы. (Спасибо участнику форума и g+community)
Эта проблема из-за cURL, curl использует ipv6 для подключения к вашим репозиториям, поэтому вам нужно настроить curl на использование ipv4.
Нам нужно отредактировать файл systl.conf.
sudo vim /etc/sysctl.conf
добавьте следующие строки :-
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
также отредактируйте
sudo vi /proc/sys/net/ipv6/conf/all/disable_ipv6
замените 0 на 1
и обновите репозитории
sudo zypper refresh
Вкратце:вы должны использовать кавычки вокруг расширений массива таким образом, если вы явно не хотите разбивать поле/слово. "$@"
расширяет каждый позиционный параметр до отдельного слова, и аналогично "${a[@]}"
. Кроме того, это должно работать так же для "${a[@]:0:2}"
.
Тем не менее, это все еще кажется несоответствием в Bash, и то, что вы использовали, должно работать в вашем случае (, так как в значениях нет символов глобуса, а разделение полей обеспечивается установкой IFS
правильно ).
Полный массив работает:
$ IFS=$'\n'
$ a=("foo bar" "asdf ghjk")
$ printf "%s\n" ${a[@]}
foo bar
asdf ghjk
Нарезка не работает для массива, но работает для$@
:
$ printf "%s\n" ${a[@]:0:2}
foo bar asdf ghjk
$ set -- "aa bb" "cc dd"
$ printf "%s\n" ${@:1:2}
aa bb
cc dd
Это работает в ksh и zsh, что как бы подчеркивает непоследовательность Bash здесь(zsh, конечно, будет иметь свой собственный синтаксис для эквивалента):
$ ifs=$'\n' ksh -c 'IFS="$ifs"; a=("foo bar" "asdf ghjk"); printf "%s\n" ${a[@]:0:2}'
foo bar
asdf ghjk
$ ifs=$'\n' zsh -yc 'IFS="$ifs"; a=("foo bar" "asdf ghjk"); printf "%s\n" ${a[@]:0:2}'
foo bar
asdf ghjk
Версия в кавычках работает и в Bash, и она лучше, когда вам нужны значения как -, так как вам не нужно зависеть от IFS
.Значение по умолчанию IFS
здесь работает нормально, даже несмотря на то, что элементы массива содержат пробелы :
$ unset IFS # uses default of $' \t\n'
$ printf "%s\n" "${a[@]:0:2}"
foo bar
asdf ghjk
Похоже, что ${a[@]:0:2}
без кавычек соединяет элементы пробелами, что немного похоже на то, что происходит в Bash в контекстах, где разбиение слов -не происходит (, например.str=${a[@]}
). А затем пытается разделить результат на IFS
, как обычно. Например. здесь он разбивается на новую строку в середине второго элемента массива:
$ IFS=$'\n'
$ a=("foo bar" $'new\nline' "asdf ghjk");
$ printf ":%s\n" ${a[@]:0:3}
:foo bar new
:line asdf ghjk
Как было сказано выше, в большинстве случаев вам действительно следует использовать кавычки вокруг расширений массива, хотя все же можно предположить, что ${a[@]:n:m}
приведет к нескольким словам, как это делает ${a[@]}
.
Поведение здесь похоже присутствует в Bash 4.4.12(1)-release
и 5.0.0(1)-alpha
. Я опубликовал отчет об ошибке.
цитата
цитата
Это работает:
$ game_array=("foo bar" "baz" "bam foo" "bar")
$ for game in "${game_array[@]:0:10}" ; do echo "$game"; done
foo bar
baz
bam foo
bar