我试图搜索位于4-7号字符中的确切字符串。
当我在终端上运行cut
命令时,它工作,
但是在脚本中它失败了,因为我认为if语句提供了我" 0"。
这就是我所做的:
for NAME in `cat LISTS_NAME`; do
if [[ John == cut -c 4-7 "${NAME}" ]]; then
Do Something ...
fi
if [[ Dana == cut -c 4-7 "${NAME}" ]]; then
Do Something...
fi
您能告诉我如何使用cut
或任何其他注册表来运行此操作吗?
答案 0 :(得分:1)
您的脚本存在许多问题,您不需要cut
。以这种方式使用它:
while read -r line; do
if [[ "${line:3:4}" == "John" ]]; then
Do Something ...
elif [[ "${line:3:4}" == "Dana" ]]; then
Do Something...
fi
done < LISTS_NAME
在BASH "${line:3:3}"
与cut -c 4-7
编辑:如果您不想要精确的字符串匹配,那么您可以使用:
while read -r line; do
if [[ "${line:3}" == "John"* ]]; then
Do Something ...
elif [[ "${line:3}" == "Dana"* ]]; then
Do Something...
fi
done < LISTS_NAME
答案 1 :(得分:1)
您没有在那里运行cut
命令。您正在将John
和Dana
与文字字符串 cut -c 4-7 <value-of-$NAME>
进行比较。
您需要使用:
if [[ John == $(cut -c 4-7 "${NAME}") ]]; then
等
据说你应该只进行一次切割调用并将其存储在一个变量中。为了精确匹配,您需要引用==
的右侧以避免全局变形。所以
substr=$(cut -c 4-7 "${NAME}")
if [[ John == "$substr" ]]; then
然后为避免需要重复的if ...; then
行,您可以使用case
语句做得更好:
substr=$(cut -c 4-7 "${NAME}")
case $substr in
John)
Do something
;;
Dana)
Do something else
;;
esac