linux - Bash 脚本变量

标签 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)" 行有问题。在 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/

相关文章:

c - 信号 "auto-block"(当执行进入处理程序函数时)是否会阻止另一个此类信号传递到另一个线程?

macos - Bash touch - 非法选项 -d

linux - 如何使用多个正则表达式在 Solaris 中查找文件

php - 取消设置变量组

javascript - 使javascript引用变量成为值变量?

linux - 如何阻止 getopts 将空白或 null 或其他选项作为选项值

c - 为什么 I2C_SMBUS_BLOCK_MAX 被限制为 32 字节?

html - sed 从 html 文件中删除标签

bash - 使用 "printf %q"时如何抑制不需要的美元和引号符号?

r - 从 var 输出中提取系数和方差-协方差矩阵(用 vars 包估计)