我想创建一个脚本A来创建脚本B.脚本B创建一个目录。所以我用这个内容创建了一个文件,授予它x权限,然后执行它。不幸的是它并没有像我预期的那样运行。它先创建目录然后创建一个空文件。为什么呢?
#!/bin/bash
batch=`mkdir /home/hieund/bpl`
echo $batch > newfile
更新: 在尝试解决方案后,我有:
#!/bin/bash
$myPath=$HOME/bpl
batch='mkdir ' $myPath
echo $batch > newfile
它不起作用。同样意外的行为。
更新
#!/bin/bash
$myPath=$HOME/bpl
batch="mkdir $myPath"
echo $batch > newfile
它也不起作用。同样意外的行为。
bash: /home/hieund/bpl=/home/hieund/bpl: No such file or directory
答案 0 :(得分:4)
它在分配时创建了一个目录,因为你用"命令替换"
说了这个batch=`mkdir /home/hieund/bpl`
执行流程
mkdir /home/...
- 创建目录 - 因为反引号 - 命令替换mkdir
不返回任何内容,因此batch=
(它没有任何分配)echo $batch
回应"没有"所以:echo > newfile
你应该使用
batch='mkdir /home/hieund/bpl'
用于嵌入变量使用双引号
batch="mkdir $myPath"
您始终可以使用bash -x script
来显示正在执行的内容。例如。有一个脚本myscript.sh
#!/bin/bash
MYDIR="./somedir"
batch="mkdir $MYDIR"
echo "$batch" > newfile
命令
bash -x myscript.sh
将显示命令和参数的执行情况。 (注意,未显示重定向)
+ MYDIR=./somedir
+ batch='mkdir ./somedir'
+ echo 'mkdir ./somedir'
一条评论:您通常应该使用双引号将事物分配给变量,因为您可以避免使用空格问题。注意
myvar=$VAR/some
和
myvar="$VAR/some"
当$VAR
包含空格时,会产生很大的不同。
答案 1 :(得分:0)
因为反引号不用于字符串。
batch="mkdir /home/hieund/bpl"