मैं 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
में या शायद किसी अन्य कारण से न्यूलाइन वर्ण को हटाना चाहता है? मैं बस बैश स्क्रिप्टिंग सीखना शुरू कर रहा हूं और मैंने कुछ समय गुगल किया है लेकिन इस तरह कोई उपयोग नहीं मिला।
अच्छी तरह से, सुझाव जो आप देते हैं वह बहुत अच्छी तरह से काम करता है। क्या '$' \ n'' यहाँ परिवर्तनीय प्रतिस्थापन है? मैं बस इसे समझ नहीं सका। – yorua007
नहीं, इसे 'एएनएसआई-सी कोटिंग' कहा जाता है, http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting –
ओह, मुझे मिल गया। बहुत बहुत धन्यवाद। – yorua007