如何不用echo命令将表达式的字符串输出结果赋值给变量
你提供的原代码除了echo冗余的问题外,还有一处语法错误:FILE_NAME 赋值行末尾多了多余的右括号,会直接触发语法报错。
为什么不能直接去掉echo
rev、cut、sed这类文本处理命令默认从标准输入读取内容,你原来的写法是用echo把变量内容输出到管道,作为后续命令的输入,直接删除echo后后续命令没有输入源,自然无法正常运行。
推荐最优实现方案
实现路径拆分完全不需要调用外部命令和管道,直接用Bash内置的参数扩展功能即可,这是目前性能最好、写法最简洁的方案:
SOME_PATH="/some/path/file" # 提取文件名:删除变量开头到最后一个/的所有内容 FILE_NAME="${SOME_PATH##*/}" # 提取文件夹路径:删除变量最后一个/到结尾的所有内容 FILE_FOLDER="${SOME_PATH%/*}" echo "${SOME_PATH}" echo "${FILE_NAME}" echo "${FILE_FOLDER}"
如果要兼容末尾带斜杠的特殊路径(比如/some/path/file/),可以先提前清除路径末尾的斜杠再做拆分,逻辑更健壮:
SOME_PATH="/some/path/file/" # 先删除末尾所有连续斜杠 SOME_PATH="${SOME_PATH%%+(/)}" FILE_NAME="${SOME_PATH##*/}" FILE_FOLDER="${SOME_PATH%/*}"
这种方案完全基于Shell内置能力,不需要创建子进程调用外部工具,执行效率远高于管道写法,代码可读性也更高。
内容的提问来源于stack exchange,提问作者neolith
相关产品推荐
相关产品推荐

