]Вы можете попробовать команду sux:[
] [sux user2
]
[]sux обработает $DISPLAY для вас. Вам может понадобиться установить его с:[
] [sudo apt-get install sux
]
[]в Debian/Ubuntu.[
].Проблема в вашем массиве. Похоже, вы создали массив только с одним элементом. Попробуйте этот пример:
array=("$(printf 'Apple\nBanana\nClementine\nDate')")
for ((i = 0; i < ${#array[@]}; i++)); do
printf '%d. %s\n' $((i+1)) "${array[$i]}"
done
j=0
for e in "${array[@]}"; do
j=$((j+1))
printf '%d. %s\n' "$j" "$e"
done
k=0
for e in ${array[@]}; do
k=$((k+1))
printf '%d. %s\n' "$k" "$e"
done
Затем запустите:
$ ./test.sh
1. Apple
Banana
Clementine
Date
1. Apple
Banana
Clementine
Date
1. Apple
2. Banana
3. Clementine
4. Date
Вы можете увидеть, вы на самом деле создаете массив, содержит один элемент. 3-й цикл печатает четыре элемента, потому что оболочка выполнила полевое расщепление на строке Apple \ Nbanana \ NClementine \ Ndate
, которая дала вам четыре разделенные слова.
Если вы измените массив на:
set -f
array=( $(printf 'Apple\nBanana\nClementine\nDate') )
set +f
( SET -F
отключает расширение подстановки, в случае, если символы *? \ [
появляются в выходе команды) Получите желаемый результат, который является то, что вывод команды разделен на пробел:
$ ./test.sh
1. Apple
2. Banana
3. Clementine
4. Date
1. Apple
2. Banana
3. Clementine
4. Date
1. Apple
2. Banana
3. Clementine
4. Date
Обратите внимание, что вы должны использовать двойные кавычки «$ {Array [@]}»
, когда вы хотите повторить Через всех элементов массива или используйте C-стиль для петли, как мой первый пример.
Это то, что вам нужно:
[sreeraj@server ~]$ fruits=(Apple Banana Clementine Date)
[sreeraj@server ~]$ (IFS=$'\n'; echo "${fruits[*]}") | nl
1 Apple
2 Banana
3 Clementine
4 Date
[sreeraj@server ~]$