我刚写了一个等待用户路径的脚本。我使用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"
答案 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"