【发布时间】:2021-06-26 08:45:48
【问题描述】:
我有一个结构为task_name-student_name 的字符串,我想将其拆分为两个变量:
-
task:包含-之前的块 -
student:包含-之后的块
我可以使用sed:
string="task_name-student_name"
student=$(echo "$string" | sed "s/.*-//")
task=$(echo "$string" | sed "s/-[^-]*$//")
但是,VS Code 建议“看看你是否可以改用 $(variable//search/replace)”。
所以我有两个问题:
- 为什么
$(variable//search/replace)会更好 - 如何在不将其解释为命令的情况下使参数扩展工作?
当我尝试时
echo $("$string"//-[^-]*$//)
或
echo $(echo $("$string"//-[^-]*$//))
我得到这个输出:
bash: task_name-student_name//-[^-]*$//: No such file or directory
提前致谢!
【问题讨论】:
-
见:
echo "${string#*-} and ${string%-*}"和 Parameter Expansion -
$( )不起作用。${string/substring/replace}可以做简单的替换但不支持正则表达式。我建议使用IFS='-';read -a str_arr <<< "$string"