我有一个这样的场景
VAR = `Some command brings the file path name and assigns it to VAR`
例如 VAR 可以具有类似 /root/user/samp.txt 的值
我想要 grep 命令
grep HI $VAR
这不起作用,会出现错误,提示无法打开 /root/user/samp.txt 尝试 cat $VAR 时出现相同的错误。
这要怎么处理呢?
我已经尝试过
echo $VAR | grep HI
grep HI "$VAR"
使用 korn shell
答案1
我知道您要求 grep,但如果我理解正确的话,您想在路径字符串中搜索子字符串。您可以仅使用==
or=~
来实现此目的,如
[[ "$VAR" == *"HI"* ]] # Does "$VAR" match <stuff>HI<stuff>?
或者
[[ "$VAR" =~ "HI" ]] # Does "$VAR" contain HI?
答案2
我有一个由命令分配文件路径的变量,
例如
VAR= grep /adr filename
- 假设我的文件名有一行像/adr/samp.txt
因此,当我 echo $VAR 时,它会给出 /adr/samp.txt,但会给出 cat $VAR 或 grep 的错误
我通过设置 VAR=$(grep /adr filename) 解决了这个问题。然后我就可以做 cat $VAR 了。
我不知道有什么问题``
谢谢,阿德尔
答案3
WAF的[[ "$VAR" =~ "HI" ]]
答复这里有一个很棒的bash
/ksh
解决方案,可能就是您正在寻找的,但如果有人正在寻找一个便携式解决方案,这里是如何在普通的 POSIX shell(基本/bin/sh
)中本地执行此操作:
[ "$VAR" != "${VAR#*HI}" ]
当心,shell 模式语法(又名“通配符”)是不同的来自 POSIX 正则表达式语法。
这会将 的值$VAR
与${VAR#*HI}
参数扩展进行比较,从而实现子串删除删除开头到第一个“HI”实例之间的任何内容(给定VAR="OHIO"
,${VAR#*HI}
将删除前导OHI
,结果只是O
.VAR="Hi, I am bob"
将保持不变)。
由于!=
比较,返回值将是真的( 0
) 当两个字符串不同时(表示 中存在“HI” $VAR
)并且错误的( 1
) 当它们相同时(表示 中不存在“HI” $VAR
)。