Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中检查文件名的最后一个字符_Bash - Fatal编程技术网

在bash中检查文件名的最后一个字符

在bash中检查文件名的最后一个字符,bash,Bash,我正在尝试编写一个脚本,检查用户是否意外地在文件路径(如MY_PATH)的末尾添加了一个额外的/字符,如果添加了,则删除最后一个字符。下面的脚本确实成功删除了路径的最后一个字符,但由于某些原因,它有时也会删除最后一个字符,即使它不是/。有人知道它为什么这样做或者如何修复它吗?我对其他解决办法持开放态度 MY_PATH="~/directory/Rscript.R" #MY_PATH="~/directory/Rscript.R/" if [ "${MY_PATH:$((${#MY_PATH}-1

我正在尝试编写一个脚本,检查用户是否意外地在文件路径(如MY_PATH)的末尾添加了一个额外的/字符,如果添加了,则删除最后一个字符。下面的脚本确实成功删除了路径的最后一个字符,但由于某些原因,它有时也会删除最后一个字符,即使它不是/。有人知道它为什么这样做或者如何修复它吗?我对其他解决办法持开放态度

MY_PATH="~/directory/Rscript.R"
#MY_PATH="~/directory/Rscript.R/"
if [ "${MY_PATH:$((${#MY_PATH}-1)):${#MY_PATH}}"=="/" ]
    then MY_PATH=${MY_PATH:0:$((${#MY_PATH}-1))}; fi
echo ${MY_PATH}
你可以使用sed

演示:


您可以尝试通过以下方式检查最后一个字符:

如果[${MY_PATH:-1}='/'];然后 ... fi
字符串的最后一个字符由${MY_PATH:-1}访问。您可以按如下方式进行测试:

if test ${MY_PATH: -1} = / ; then


前三个选项使用字符串比较,第四个使用通配符匹配,最后一个使用正则表达式匹配。这些备选方案中的大多数空格都很重要,因此请确保正确使用空格。

最初的问题是需要在==周围使用空格。另外,在[]测试中它应该是=并且~不在引号内展开,并且应该在最后一行中双引号${MY_PATH}。
$MY_PATH="~/directory/Rscript.R/"
$MY_PATH=$(sed 's#\/$##g' <<< ${MY_PATH})
$echo $MY_PATH 
~/directory/Rscript.R
$MY_PATH="~/directory/Rscript.R"
$MY_PATH=$(sed 's#\/$##g' <<< ${MY_PATH})
$echo $MY_PATH 
~/directory/Rscript.R
$

if test ${MY_PATH: -1} = / ; then
if [ ${MY_PATH: -1} = / ]; then
if [[ ${MY_PATH: -1} = / ]]; then
if [[ ${MY_PATH: -1} == / ]]; then
if [[ ${MY_PATH: -1} =~ / ]]; then