Массив bash
не может быть переменной среды, так как переменные среды могут быть только парами ключевых строк -значений.
Вы можете сделать то, что делает оболочка со своей переменной $PATH
, которая по существу является массивом путей; превратить массив в строку, разделенную определенным символом, иначе не присутствующим в значениях массива:
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
Или аккуратнее,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
Расширением ${arr[*]}
будут элементы массива arr
, разделенные первым символом IFS
, здесь установлено значение :
. Обратите внимание, что если сделать это таким образом, элементы строки будут разделены (, а не разделены)на :
, что означает, что вы не сможете отличить пустой элемент в конец, если он был.
Очевидно, что альтернативой передаче значений сценарию с использованием переменных окружения является (? )для использования аргументов командной строки:
arr=( aa bb cc )
./some_script "${arr[@]}"
Затем сценарий будет обращаться к переданным аргументам либо один за другим, используя позиционные параметры $1
, $2
, $3
и т. д., либо с помощью$@
:
printf 'First I got "%s"\n' "$1"
printf 'Then I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"
for opt in "$@"; do
printf 'I have "%s"\n' "$opt"
done
od
вроде ничего не меняет, а iconv
меняет. Согласно вашему выводу, эта система отображает utf-16
в utf-16be
. Сравните с выводом моего Ubuntu на x86 -64:
$ echo hello | iconv -f ascii -t utf-16le | hd 00000000 68 00 65 00 6c 00 6c 00 6f 00 0a 00 |h.e.l.l.o...| 0000000c $ echo hello | iconv -f ascii -t utf-16le | od -x 0000000 0068 0065 006c 006c 006f 000a 0000014 $ echo hello | iconv -f ascii -t utf-16be | hd 00000000 00 68 00 65 00 6c 00 6c 00 6f 00 0a |.h.e.l.l.o..| 0000000c $ echo hello | iconv -f ascii -t utf-16be | od -x 0000000 6800 6500 6c00 6c00 6f00 0a00 0000014
Можно было бы вызвать od -t x1
вместо hd
с аналогичным результатом:
$ echo hello | iconv -f ascii -t utf-16be | od -t x1 0000000 00 68 00 65 00 6c 00 6c 00 6f 00 0a 0000014
похоже на hd
, но без столбца ASCII.
Но мой Ubuntu сопоставляет utf -16 с utf -16le со спецификацией:
$ echo hello | iconv -f ascii -t utf-16 | od -x 0000000 feff 0068 0065 006c 006c 006f 000a 0000016 $ echo hello | iconv -f ascii -t utf-16 | hd 00000000 ff fe 68 00 65 00 6c 00 6c 00 6f 00 0a 00 |..h.e.l.l.o...| 0000000e
Интересно, почему ваша система OS X настроена наоборот. Я не вижу для этого реальной причины; возможно, это какое-то странное наследие или ошибка конфигурации компиляции. Есть ли на него документация с упоминанием этого момента?