拆下'/';从变量末尾-bash

拆下'/';从变量末尾-bash,bash,Bash,我希望删除变量末尾的“/”,以便检查文件是否是指向目录的符号链接。我已经尝试了几乎所有我能想到或在网上找到的方法,有什么我遗漏的吗 如果我检查一个文件是否是结尾带有“/”的符号链接,它会将其视为一个目录。这可以通过运行以下命令进行检查: if [ -L symtest/ ] ; then echo "symlink"; fi 其中symtest是指向目录的符号链接。以上内容没有任何输出 当我删除“/”时,它工作正常并输出“符号链接”: 我的问题是,当把“/”作为变量传递给函数时,有没有办法从名

我希望删除变量末尾的“/”,以便检查文件是否是指向目录的符号链接。我已经尝试了几乎所有我能想到或在网上找到的方法,有什么我遗漏的吗

如果我检查一个文件是否是结尾带有“/”的符号链接,它会将其视为一个目录。这可以通过运行以下命令进行检查:

if [ -L symtest/ ] ; then echo "symlink"; fi
其中symtest是指向目录的符号链接。以上内容没有任何输出

当我删除“/”时,它工作正常并输出“符号链接”:

我的问题是,当把“/”作为变量传递给函数时,有没有办法从名称中删除它

该函数将类似于:

function is_it_a_symlink() {
    if [ -L $1 ] ; then
        echo "This file is a symlink!"
    else
        echo "This file is not a symlink!"
    fi
}

提前感谢。

POSIX ly,使用参数扩展删除最后一个
/

${parameter%/}
那么,你的情况是:

[ -L "${1%/}" ]

外部工具,
sed

sed 's_/$__' <<<"$1"
因此:


[-L“$(awk'{sub(“/$”,“)}1”非常好用!我之前已经尝试过了,只是没有引号。谢谢!为了安全起见,您可能应该删除所有尾随的
/
;不要假设只有一个。
${1%%/}
@chepner,…有效吗?我以为必须使用extglob来匹配那里的序列。事实上,在我看来,它就像是一个序列;因此,
${1%%+(/)}
,在
shopt-s extglob
之后。请注意,POSIX的规则要求您遵守。@Alexander,请避免将ABS作为一种资源进行链接——它长期以来一直以展示不良做法而闻名。(使用免费的
function
关键字——这会破坏与POSIX sh的兼容性,但不会在标准化的函数声明语法上增加任何值——就是这样的一个例子)“@Alexander,……实际上,在您链接的特定页面中还有更严重的错误做法。
directorys=$@
丢失了边界信息——您无法区分
/yourscript“foo bar”和“baz qux”“
/yourscript foo bar baz qux
使用后;
linkchk
函数缺少引号(需要是
“$1”/*
linkchk”$element”
),等等。@Alexander,“
test
操作符的一个更好的链接是;另一个可靠的资源是Wooledge wiki,也就是说,“
test
的POSIX规范在@CharlesDuffy,谢谢,我将研究这些链接。”。
sed 's_/$__' <<<"$1"
[ -L "$(sed 's_/$__' <<<"$1")" ]
awk '{sub("/$", "")} 1' <<<"$1"
[ -L "$(awk '{sub("/$", "")} 1' <<<"$1")" ]