#!/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)"
行有问题。在 Debug模式下运行脚本(bash -x script-name
),输出为:
test.sh: line 9: RESULT: command not found
由于某些原因,它无法获取变量 RESULT
的结果并将 dir
命令的输出保存到新变量 FILENAME
。我不明白为什么会这样。
经过多次尝试,我找到了将 finame 和 finame 的完整路径保存到两个不同变量的解决方案。 现在,我想要为每个 finame,找到每个文件名的不区分大小写。比如找文件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。
最佳答案
语法:
$(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 .
关于linux - Bash 脚本变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20881881/