#!/bin/bash
RESULT=$(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
for i in $(RESULT);
do
echo "$i"
FILENAME="$(dirname $RESULT)"
done
我遇到了FILENAME="$(dirname $RESULT)"
行的问题。以调试模式(bash -x script-name
)运行脚本,输出为:
test.sh: line 9: RESULT: command not found
由于某种原因,它无法获取变量RESULT
的结果并将dir
命令的输出保存到新变量FILENAME
。我不明白为什么会这样。
经过多次尝试,我找到了解决方案,以保存完整的finame路径和finame到两个不同的变量。 现在,我想要每个finame,找到每个文件名的非大小写敏感。例如,查找file image.png,文件是否为image.PNG
并不重要我正在运行脚本
while read -r name; do
echo "$name"
FILENAME="$(dirname $name)"
BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
然后输入命令:
find . $FILENAME -iname $BASENAME
但它没有找到命令FILENAME和BASENAME。
答案 0 :(得分:2)
语法:
$(RESULT)
表示命令替换。这样说会尝试运行命令RESULT
。
为了替换变量RESULT
的结果,请说:
${RESULT}
代替。
此外,如果命令返回多行输出,则此方法不起作用。
相反说:
while read -r name; do
echo "$name"
FILENAME="$(dirname $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
<(command)
语法称为Process Substitution。
答案 1 :(得分:0)
for $ in $(结果)是对的。你可以使用$ RESULT或$ {RESULT}