简体   繁体   English

替换bash变量中的换行符?

[英]replace newline character in bash variable?

I am trying to understand the "cdargs-bash.sh" script with cdargs packages. 我试图用cdargs包理解“cdargs-bash.sh”脚本。 And I have a question about in the following function: 我在以下函数中有一个问题:

function _cdargs_get_dir ()
{
local bookmark extrapath
# if there is one exact match (possibly with extra path info after it),
# then just use that match without calling cdargs
if [ -e "$HOME/.cdargs" ]; then
    dir=`/bin/grep "^$1 " "$HOME/.cdargs"`
    if [ -z "$dir" ]; then
        bookmark="${1/\/*/}"
        if [ "$bookmark" != "$1" ]; then
            dir=`/bin/grep "^$bookmark " "$HOME/.cdargs"`
            extrapath=`echo "$1" | /bin/sed 's#^[^/]*/#/#'`
        fi
    fi
    [ -n "$dir" ] && dir=`echo "$dir" | /bin/sed 's/^[^ ]* //'`
fi
if [ -z "$dir" -o "$dir" != "${dir/
/}" ]; then
    # okay, we need cdargs to resolve this one.
    # note: intentionally retain any extra path to add back to selection.
    dir=
    if cdargs --noresolve "${1/\/*/}"; then
        dir=`cat "$HOME/.cdargsresult"`
        /bin/rm -f "$HOME/.cdargsresult";
    fi
fi
if [ -z "$dir" ]; then
    echo "Aborted: no directory selected" >&2
    return 1
fi
[ -n "$extrapath" ] && dir="$dir$extrapath"
if [ ! -d "$dir" ]; then
    echo "Failed: no such directory '$dir'" >&2
    return 2
fi

} }

What's the purpose of the testing: 测试的目的是什么:

"$dir" != "${dir/
/}"

Here the testing span over two lines; 这里测试跨越两条线; does it want to remove the newline character in $dir or maybe for some other reason? 它是否要删除$dir中的换行符或者出于其他原因? I am just starting to learn bash scripting and I have Googled some time but couldn't find any usage like this. 我刚刚开始学习bash脚本,我用Google搜索了一段时间但找不到这样的用法。

Yes you are right, it removes the newline character. 是的,你是对的,它删除了换行符。 I think the purpose of the test is to make sure $dir doesn't contain multiple lines. 我认为测试的目的是确保$dir不包含多行。

Alternatively, you can remove \\newline by 或者,您可以删除\\newline by

${dir/$'\n'/}

This doesn't require two lines so I think it looks better. 这不需要两行,所以我觉得它看起来更好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM