我想获取所有用 bash 编写的文件,所以我使用这个命令IFBASH=$(grep -Fx #!/bin/bash *)
它有效。
输出:test.sh:#!/bin/bash t test2.sh:#!/bin/bash
所有这些都保存在变量 $IFBASH 中。现在我想删除:#!/bin/bash
所以我用了LIST=$(echo "$IFBASH" | tr -d ':#!/bin/bash')
输出:
tet.h
tet2.h
这绝对不是我想要的。有人能给我一个真正有效的命令吗?
答案1
那失败了,因为tr
需要一个字符列表作为输入,而不是字符串。因此echo abc | tr 'bca' 'def'
将打印,fde
因为它将把 更改b
为 an f
,将 更改c
为 a d
,将 更改a
为 an e
。
grep
您可以通过告诉不包含您不需要的部分(如果您grep
支持该选项,如 Linux 上的选项)或使用可以替换字符串的工具来执行您想要的操作-l
,例如sed
:
使用GNU
grep
ifbash=$(grep -lx '#!/bin/bash' *)
使用
sed
orperl
或任何其他可以替换字符串的工具ifbash=$(grep -x '#!/bin/bash' * | sed 's|#!/bin/bash||')
或者
ifbash=$(grep -x '#!/bin/bash' * | perl -pe 's|#!/bin/bash||')
请注意,我删除了该-F
选项,因为此处不需要该选项,并将其更改IFBASH
为ifbash
.通常最好避免在 shell 脚本中使用大写变量名称,因为按照惯例,全局环境变量都是大写的,如果您使用已在系统范围内定义的名称,则可能会导致意外行为。