删除" /"在bash变量目录中

时间:2016-11-27 10:37:31

标签: bash

我刚写了一个等待用户路径的脚本。我使用read

为了更加用户友好,你可以使用 tab 来完成这个路径。

我的问题是:如果文件存在,则会在行尾添加"/"字符串。所以我只想删除它,我在这里和互联网上搜索,我发现了这个:

echo ${str::-1)

所以我使用了一个简单的迭代(如果最后找到"/"然后删除)但是当我将脚本作为错误消息运行时它返回给我:"str is a directory..."

以下是一个例子:

read -e -p "Where do you want to install it ?
Install directory : " _installdir

echo "$_installdir"
_slashdel=echo "$_installdir" |tail -c 1
echo -e "$_slahdel" #just used for debug here
if [ "$_slahdel" = "/" ];
then
        echo "{echo _installdir::-1}"
fi
echo "install dir :" "$_installdir"

3 个答案:

答案 0 :(得分:1)

如果要删除可选的尾随/,最好使用${str%/}

read -e -p "Where do you want to install it ?
Install directory : " _installdir

_installdir=${_installdir%/}
echo "install dir : $_installdir"

不仅更简单,而且如果没有尾随/,那么它只会保留原始值。 因此,您不需要像原始脚本中使用的if语句。

您可以在此处了解有关字符串操作的更多信息:

http://www.tldp.org/LDP/abs/html/string-manipulation.html

顺便说一下,你的脚本充满了错误。您可以在shellcheck.net上验证脚本的完整性。

答案 1 :(得分:0)

大多数代码都无关紧要(您正在测试_slahdel,这与_slashdel不同。)

错误消息来自此部分(您应该通过缩小代码来发现自己):

_slashdel=echo "$_installdir"

这告诉bash运行命令$_installdir,并将环境变量_slashdel设置为echo。由于$_installdir是一个目录,因此无法运行,因此会出错。

答案 2 :(得分:0)

read -e -p "Where do you want to install it ?
Install directory : " _installdir

echo "$_installdir"
_slashdel=$(echo -n "$_installdir" |tail -c 1)
echo -n "$_slashdel" #just used for debug here
if [ "$_slashdel" = "/" ];
then
        _installdir="${_installdir::-1}"
fi
echo "install dir :" "$_installdir"