【问题标题】:Linux rm command with variable带变量的 Linux rm 命令
【发布时间】:2014-11-05 17:30:08
【问题描述】:

我和我的合作伙伴在使用这个基本的 Linux 脚本时遇到了问题。我们的讲师向我们倾倒了一个高级 Linux 脚本包进行调试,我们都非常迷茫。该脚本假设删除文件名中包含嵌入空格的文件,我被困在实际的 rm 命令上。我得到“缺少操作数”,我不知道该怎么办。

#!/bin/bash

# This script is supposed to delete all filenames in current directory
#+ containing embedded spaces.
# It doesn't work
# Why not?


badname= ls | grep " "

# Try this:
echo "$badname"

rm "$badname"

exit 0

【问题讨论】:

  • 您收到什么错误或消息?

标签: linux scripting rm


【解决方案1】:

您需要命令替换才能将ls | grep " " 的值放入badname 变量中

以下任一选项都可以:

badname=`ls | grep " "`

badname=$(ls | grep " ")

您可以阅读有关命令替换的更多信息here。 希望这会有所帮助

【讨论】:

  • 我收到以下错误 " badname= ls | grep " " " 我认为声明变量没有问题,因为脚本实际上回显了要删除的文件。我认为问题出在 rm 命令上。感谢您的回复!
  • 你告诉 badname 它等于文本 'ls |grep " "` 这就是为什么它回显它。您没有正确分配变量。您需要进行命令替换才能将 ls | grep " " 的值放入变量中。阅读答案中的链接。
【解决方案2】:

badname= ls | grep " " 显然是错误的。试试这个:

#!/bin/bash
TMPFILE="tmp.txt"

ls | grep " " > $TMPFILE

cat $TMPFILE | while read -r LINE
do
        rm "$LINE"
done

【讨论】:

  • 效果很好,但我认为这不是他想要的,因为它与原版有很大不同。他不在,所以我不能问他。我认为 badname= ls | grep " " 工作正常,因为它实际上回显了错误的文件名,只是不会删除它们。
猜你喜欢
  • 2016-09-29
  • 1970-01-01
  • 2015-12-18
  • 2015-08-17
  • 2017-03-10
  • 2015-01-24
  • 1970-01-01
  • 2012-05-13
  • 2016-07-16
相关资源
最近更新 更多