拆下'/';从变量末尾-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")" ]