bash: пробелы удалены из строки - PullRequest
0 голосов
/ 30 августа 2011

Я написал небольшую библиотечную функцию, чтобы помочь мне выйти, когда владелец скрипта не является root:

#!/bin/bash   

# Exit for non-root user

exit_if_not_root() {
        if [ "$(id -u)" == "0" ]; then return; fi
        if [ -n "$1" ];
        then
                printf "%s" "$1"
        else
                printf "Only root should execute This script. Exiting now.\n"
        fi
        exit 1
}

Здесь я вызываю его из другого файла:

#!/bin/bash

source ../bashgimp.sh

exit_if_not_root "I strike quickly, being moved. But thou art not quickly moved to strike.\n You're not root, exiting with custom message."

И вывод:

I strike quickly, being moved. But thou art not quickly moved to strike.\n You're not root, exiting with custom message.

Как сделать так, чтобы символ новой строки отображался правильно?

Ответы [ 4 ]

1 голос
/ 30 августа 2011

Может покончить с "%s" и просто

printf "$1"

было бы проще всего в этом случае.

Экранирующие последовательности ANSI-C не обрабатываются как таковые по умолчанию в строках - они такие же, как и другие литералы. Форма

$'ANSI text here'

подвергнется замене на обратную косую черту. ( Ref. )

В вашем случае, тем не менее, поскольку вы просто print используете предоставленную отформатированную строку, вы также можете рассматривать ее как строку формата, а не как аргумент.

1 голос
/ 30 августа 2011

Или правильно цитируйте строку.Вы можете использовать буквальные символы новой строки в строке в кавычках или использовать, например, синтаксис цитирования $'string'.

1 голос
/ 30 августа 2011

Просто используйте echo -e вместо printf

0 голосов
/ 30 августа 2011

В функции измените строку на

printf "%s\n" "$@"

И вызовите функцию вот так

exit_if_not_root "text for line 1" "text for line2" "text for line 3"

printf будет повторно использовать строку формата для столько строк значений, сколько вы предоставите.

...