Linux Bash脚本变量

Linux Bash脚本变量,linux,bash,variables,Linux,Bash,Variables,我对行FILENAME=“$(dirname$RESULT)”有问题。在调试模式下运行脚本(bash-x script name),输出为: #!/bin/bash RESULT=$(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt) for i in $(RESULT); do echo "$i" FILENAME="$(dirname $RESULT)" done while read -r name; do echo "$name" FILEN

我对行
FILENAME=“$(dirname$RESULT)”
有问题。在调试模式下运行脚本(
bash-x script name
),输出为:

#!/bin/bash

RESULT=$(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)

for i in $(RESULT);
do
echo "$i"
FILENAME="$(dirname $RESULT)"
done
while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
由于某些原因,它无法获取变量
result
的结果,并将
dir
命令的输出保存到新变量
FILENAME
。我不明白为什么会这样

while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
经过多次尝试,我找到了将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)
我正在运行脚本

test.sh: line 9: RESULT: command not found
while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
但是它说找不到命令文件名和BASENAME。

语法:

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
表示命令替换。这样做将尝试运行命令
RESULT

while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
要替换变量
result
的结果,请说:

while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
$(RESULT)
相反

while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)

此外,如果命令返回多行输出,这种方法将不起作用

while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
而是说:

while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)
${RESULT}
读取时-r名称;做
回显“$name”
FILENAME=“$(dirname$name)”

$(RESULT)中的i的done<不正确。您可以使用$RESULT或${RESULT}

我做了您提到的更改。在行中输入i,单位为美元(结果);我在${RESULT}中更改了I;但是什么都没变。@user200913什么都没变是什么意思?你也会犯同样的错误吗?你还有其他错误吗?是否得到意外结果?我得到意外结果文件的每一行都包含文件名的完整路径。因此,当我运行脚本时,它会输出我想要的每个文件,但最后会显示RESULT:command not found。当我进行您提到的更改时,输出的是所有文件,但不是每一行,而是所有文件。这就是我说意外结果的原因。@user200913是的,如果
RESULT
包含多行输出,您将得到意外结果。请参阅上面的编辑。我找到了为什么找不到FILENAME&BASENAME命令的输出。我为每个变量添加了引号。现在,虽然它已将完整路径保存到变量FILENAME,但它表示没有这样的目录。它似乎无法读取文件的实际路径。
while read -r name; do
  echo "$name"
  FILENAME="$(dirname $name)"
  BASENAME="$(basename $name)"
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt)