Я бы хотел, чтобы оболочка печатала каждую новую строку без пробела и удаляла пустое пространство строки


Я бы хотел, чтобы оболочка печатала каждую новую строку без пробела и удаляла пустое пространство строки

19.01.2020 11:13:33 Просмотров 69 Источник

Моя оболочка печатает выходные данные, как показано ниже.

$ echo ${mount_check[*]} |tr "." "\n"
File system /abc is NOT mounted
 File system /xyz is NOT mounted

$

Я пытался использовать echo "${mount_check[*]}", однако это не печатало вывод так, как я хотел.

Я хотел бы, чтобы оболочка печатала каждую новую строку без пробела и удаляла пустое пространство строки, как показано ниже.

File system /abc is NOT mounted
File system /xyz is NOT mounted

По просьбе Дэвида и трипли добавляем полный код.

fstable=( $(awk '!/bind|swap|shm/ && $1 !~/#|^$/ && !/^ +$/ { print $2 }' /etc/fstab))
mount_check=($(for mount in "${fstable[@]}"; do
if [[ -z $(findmnt -m "$mount") ]]
then
echo "File system $mount is NOT mounted."
fi
done))
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59808322/i-would-like-the-shell-print-every-new-line-with-no-space-and-remove-the-empty-l#comment105756110_59808322
Я на самом деле попробовал echo "${mount_check[@]}" .Вот как делается массив. ......mount_check=($(для монтирования в "${fstable[@]}"; делать, если [[ -з $(findmnt -м "$Маунт") ]] затем Эхо "файловой системы $Маунт не установлен."фи сделано))

Ответы - Я бы хотел, чтобы оболочка печатала каждую новую строку без пробела и удаляла пустое пространство строки / I would like the shell print every new line with no space and remove the empty line space as well

Является ответом!
RavinderSingh13

19.01.2020 11:19:04

Я не уверен в вашем полном требовании, поэтому иду по вашему конкретному вопросу, чтобы решить вашу проблему.

awk

Или не - один вкладыш для вышеуказанного решения:

echo "${mount_check[*]}" | awk -F'mounted.' '{gsub(/ File/,"File");print $1 FS ORS $2 FS}'

Я считаю,что ваш вывод всегда будет иметь echo "${mount_check[*]}" |\ awk -F'mounted.' ' { gsub(/ File/,"File") print $1 FS ORS $2 FS }' команду tr.

  • 2-я вещь, о которой он позаботится, - это пустая строка, которая не будет напечатана.


  • Если вы хотите придерживаться вашего кода Fileone, то попробуйте следовать.

    tr
    tripleee

    19.01.2020 11:54:27

    Предполагая, что вы никогда не использовали эти переменные ни для чего другого, вы можете просто добавить эти настройки в сам скрипт Awk.

    awk '!/bind|swap|shm/ && $1 !~/#|^$/ && !/^ +$/ {
        p = $2 ; sub(/[.]/, "", p); print p}' /etc/fstab
    
    Ed Morton

    19.01.2020 06:43:15

    Предполагая, что ваша цель-создать массив mount_check[] со статусом всех монтируемых объектов, этот цикл:

    mount_check=($(for mount in "${fstable[@]}"; do
    if [[ -z $(findmnt -m "$mount") ]]
    then
    echo "File system $mount is NOT mounted."
    fi
    done))
    

    должно быть это вместо этого:

    mount_check=()
    for mount in "${fstable[@]}"; do
        mount_status=$(findmnt -m "$mount")
        if [[ -z "$mount_status" ]]
        then
            mount_status="File system $mount is NOT mounted."
        fi
        mount_check+=( "$mount_status" )
    done
    
    Помочь в развитии проекта:
    Закрыть X