改变bash中字符串类型变量的分隔符
问题描述:
我有一个小任务。改变bash中字符串类型变量的分隔符
我应该写:
data="duke,rock,hulk,donovan,john"
而且在未来的变量,我应该改变第一个变量的分隔符。
data2="duke|rock|hulk|donovan|john"
什么是在bash上做到这一点的正确方法?
这是脚本的一小部分,我该怎么做。
例如,我使用结构“WHILE-GETOPS-CASE”在参数中使用用户名来排除它们。
ls /home/ | egrep -v $data2
答
你可以很容易具有膨胀代替单个字符:
data="duke,rock,hulk,donovan,john"
data2=${data//,/|}
echo "$data2"
打破的语法:
-
${data
装置基于在可变data
找到的值“扩大; -
//
的意思是“搜索所有发生的”; - 孤独的
/
意味着“替换下面的内容”。
请注意,某些字符可能需要转义,但不能使用逗号和竖线。
然后你可以过滤结果是这样的:
ls /home/ | egrep -v "$data2"
答
另一个非常类似的方式是使用tr
(翻译或删除字符):
data="duke,rock,hulk,donovan,john"
data2=$(echo $data | tr ',' '|')
echo "$data2"
你想'的egrep -v“$ data2“'来防止shell在值上执行通配符扩展或空白标记。 – tripleee
不要分析'ls'的输出。如果您需要的文件不符合模式,请使用扩展模式。 'ls/home /!(duke | rock | hulk | donovan | john)'。 – chepner