gpt4 book ai didi

bash - 替换 bash 变量中的换行符?

转载 作者:行者123 更新时间:2023-11-29 08:42:49 24 4
gpt4 key购买 nike

我试图理解带有 cdargs 包的“cdargs-bash.sh”脚本。我对以下功能有疑问:

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

测试的目的是什么:

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

此处测试跨越两行;它是想删除 $dir 中的换行符还是出于其他原因?我刚开始学习 bash 脚本,我用 Google 搜索了一段时间,但找不到这样的用法。

最佳答案

是的,你是对的,它删除了换行符。我认为测试的目的是确保 $dir 不包含多行。

或者,您可以删除 \newline

${dir/$'\n'/}

这不需要两行,所以我认为它看起来更好。

关于bash - 替换 bash 变量中的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com