Bash脚本变量

时间:2014-01-02 11:25:56

标签: linux bash variables

#!/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。

2 个答案:

答案 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}