【问题标题】:basic question: using a variable content as directory name in Linux基本问题:在Linux中使用变量内容作为目录名
【发布时间】:2020-04-30 14:24:00
【问题描述】:

我想使用当前存在于特定目录中的每个 zip 文件的名称创建一个新目录,在另一个目录中。为此,我编写了一个“for 循环”:

files=NL*.zip
for a in $files; do 
b=echo $a; 
sudo mkdir '/home/shokufeh/Desktop/normals/T1/"${b}"';
done

但它会为第一轮创建一个名为 ${b} 的目录,并为下一轮创建错误。 你能告诉我我该怎么做吗?

【问题讨论】:

  • b=echo $a; 根本没有做任何有用的事情。你可能在想b=$(echo $a) 之类的东西,但你也不想这样。 b=$a 基本上做同样的事情,没有潜在的解析错误。但是为什么要使用第二个变量,而不是直接使用$a
  • @Cyrus 谢谢
  • @GordonDavisson 谢谢
  • @shs :命令b=echo $a 将临时将变量b 设置为值echo,然后尝试将$a 作为命令运行;所以你应该从这一行得到一条错误消息。既然你没有提到这一点,我猜你没有完全按照你写的那样粘贴代码。

标签: bash quotes mkdir


【解决方案1】:

您将变量放在简单的引号中,因此 '${b}' 将永远不会被解释。试试这个:

for a in NL*.zip; do 
  sudo mkdir "/home/shokufeh/Desktop/normals/T1/${a}";
done

不需要变量 $files 和 $b。

总结一下,假设var=3

  • echo "$var" 将显示 3
  • echo '$var' 将显示 $var
  • echo "'$var'" 将显示 '3'
  • echo '"$var"' 将显示 "$var"

希望这是有道理的。引号功能类似于圆括号和方括号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2016-01-15
    • 1970-01-01
    相关资源
    最近更新 更多