unix中以下语法之间的区别

时间:2014-02-18 21:13:29

标签: linux bash unix ksh

我是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}

如果我想移动一个作为参数传递的文件,我该怎么做呢

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

  • 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命令为executed in background。您的脚本不会等待命令结束,它将继续到下一行。 (编辑:在mklement0评论后注释掉了。)
  5. 将作为第一个参数(mv)给出的文件($1命令)移动到名为/data/door1的目录。
  6. 奖金提示

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

答案 2 :(得分:2)

echo没有做任何事情 print stdout 的(唯一的)参数 - 它的参数具有shell命令的形式不会使差异。

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

echo预先添加到命令经常用于测试,以查看执行时 执行的命令,而不实际执行(可能具有破坏性/不可逆性)动作)。

至于mv命令:$1引用传递给脚本的第一个参数;为了安全起见,您应该双引用引用,这应该对一般的变量引用("$1""${G_DEST_DIR}")进行。

答案 3 :(得分:-2)

echo命令显示任何用b / w“”写的内容,但如果你使用任何命令,它将首先被执行(如果有效),然后将显示其o / p。 所以这就是为什么你的两个命令都会将数据移动到文件但是在第一种情况下使用echo命令行使用move命令来执行但是它没有o / p所以进一步显示mv然后根据给定的g_dest_dir变量显示文件名。