我是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}
如果我想移动一个作为参数传递的文件,我该怎么做呢
答案 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}
G_DEST_DIR
的变量,并将字符串/data/door1
放入变量中。&
表示echo
命令为executed in background。您的脚本不会等待命令结束,它将继续到下一行。 (编辑:在mklement0评论后注释掉了。) mv
)给出的文件($1
命令)移动到名为/data/door1
的目录。奖金提示
在命令之前放置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变量显示文件名。