bash:从字符串中删除的空格

时间:2011-08-30 09:30:04

标签: string bash newline

我写了一个小的库函数来帮助我在脚本所有者不是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 个答案:

答案 0 :(得分:1)

只需使用echo -e代替printf

答案 1 :(得分:1)

也许不要使用"%s"而只是

printf "$1"
在这种情况下,

最简单。

默认情况下,ANSI-C转义序列不会被视为字符串 - 它们与其他文字相同。表格

$'ANSI text here'

虽然会进行反斜杠替换。 (Ref.

在您的情况下,由于您只是print提供的格式化字符串,您可以将其视为格式字符串而不是参数。

答案 2 :(得分:1)

或正确引用字符串。您可以在带引号的字符串中使用文字换行符,也可以使用例如$'string'引用语法。

答案 3 :(得分:0)

在该功能中,将行更改为

printf "%s\n" "$@"

并像这样调用函数

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

printf会将格式字符串重新用于您提供的任意数量的字符串。