1

我想创建一个脚本 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
4

2 回答 2

4

它在分配时创建一个目录,因为你用“命令替换”说了这个

batch=`mkdir /home/hieund/bpl`

执行流程

  1. mkdir /home/...- 创建目录 - 因为反引号 - 命令替换
  2. 什么都不返回,mkdir因此
  3. 分配就像batch=(它什么也没分配)
  4. 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当包含空格时会有很大的不同。

于 2013-06-01T08:56:51.837 回答
0

因为反引号不用于字符串。

batch="mkdir /home/hieund/bpl"
于 2013-06-01T08:55:53.603 回答