以下语法在unix中的区别



我是Unix的新手,正在学习Unix。最近我在脚本中遇到了这种语法,这让我在两者之间感到困惑:

G_DEST_DIR="/data/door1"
echo "mv $1 ${G_DEST_DIR}"
#&
mv $1 ${G_DEST_DIR}

根据我的情报,上面的代码将移动文件(作为参数传递)并将其移动到dest_dir

我的问题是之间有什么区别

echo "mv $1 ${G_DEST_DIR}"

mv $1 ${G_DEST_DIR}

如果我想移动作为参数传递的文件,我该如何进行

  • echo命令将其参数打印到终端。当使用myFile.txt作为第一个参数调用脚本时,这一行:

    echo "mv $1 ${G_DEST_DIR}"
    

    将完全打印此(并且不会移动文件):

    mv myFile.txt/data/door1

  • 另一行,不以echo:为前缀

    mv $1 ${G_DEST_DIR}
    

    将实际运行mv命令并将文件移动到/data/door1目录。

脚本分析

让我们逐行分析您的脚本:

1  G_DEST_DIR="/data/door1"
2  
3  echo "mv $1 ${G_DEST_DIR}"
4  #&
5  mv $1 ${G_DEST_DIR}
  1. 声明一个名为G_DEST_DIR的变量,并将字符串/data/door1放入该变量中
  2. (空行)
  3. 只需向用户显示一条消息。shell不会读取消息;只有用户(可能)会
  4. 命令后面的"与"和&表示echo命令将在后台执行。您的脚本不会等待命令结束,而是会移动到下一行(编辑:行在mklement0的注释后被注释掉。)
  5. 将(mv命令)作为第一个参数($1)提供的文件移动到名为/data/door1的目录中

奖金提示

echo放在命令之前是一种快速有效的方法来干式运行给定的命令,也就是说,查看在没有echo的情况下会执行什么。

  • echo=显示/打印一行文本
  • mv=移动/重命名文件

编辑:示例:假设$1(第一个参数)是old.txt

  • echo "mv $1 ${G_DEST_DIR}"打印输出"mv old.txt/data/door1">
  • mv $1 ${G_DEST_DIR}old.txt移动到目录/data/door1

echo不会将print放入stdout的(唯一的)参数中-其参数具有shell命令的形式并没有什么区别。

相比之下,以mv开头的行执行实际的文件移动/重命名命令。

echo预处理为一个命令经常用于测试,以查看命令在执行时会做什么,而不是实际执行(一种潜在的破坏性/不可逆的操作)。

对于mv命令:$1引用传递给脚本的第一个参数;为了安全起见,您应该双引号引用,就像通常对变量引用("$1""${G_DEST_DIR}")所做的那样。

echo命令显示b/w"写入的任何内容,但如果您使用任何命令,它将首先执行(如果有效),然后显示其o/p。因此,这就是为什么您的both命令会将数据移动到文件中,但在第一种情况下,带有echo的行中,语句会用move命令进行设置,但它没有o/p,因此它会根据给定的gdestdir变量显示mv,然后显示文件名。

相关内容

  • 没有找到相关文章

最新更新