2016-07-06 66 views
1

我想重命名我的文件夹。重命名一个变量在中心的文件夹

当前文件夹名称= apple。我想将它重命名为apsomeple。

新名称中心的“some”将是一个变量。

我试过以下,但它不起作用。请指教。如果我将它添加到测试结束,它就可以工作。

name="some" 

mv apple ap$nameple # doesn't work 
mv apple apple$name # works - just testing 

回答

3

您可以使用{}界定的变量名:

mv apple ap${name}ple 

如果您的变量将包含空格字符的机会,不像提供的例子,那么除了你将需要把双引号输入新文件名:

mv apple "ap${name}ple" 
+0

缺少'ap $ {name} ple'周围的双引号 – sjsam

+0

@sjsam不需要双引号。 –

+1

呃..你确定?考虑'name =“一些东西”'并且为自己测试。在这种情况下,他们需要防止分词。 – sjsam

1
mv apple "ap${name}ple" 

应该工作


为什么需要在目标

双引号考虑

name="some stuff" 

随着

mv apple ap${name}ple 

字分裂与${name}发生并且您将不会得到相关结果。 所以mv可能会给你:

mv: target ‘stuffple’ is not a directory 

随着

mv apple "ap${name}ple" 

ap${name}ple被认为是一个单一的实体。

+0

双引号是没有必要的。 –

+0

@PaulL:请参阅编辑。 – sjsam

1

将大括号放在变量名的周围。

mv apple "ap${name}ple" 

编辑:一些本地测试后,它看起来像zsh和bash处理这种情况有点不同。 Bash 确实需要双引号来防止分词和通配,而zsh确实不需要需要双引号,并且行为方式不管。

+0

缺少双引号'ap $ {name} ple' – sjsam

+1

@sjsam而不是对每个人的答案进行downvoting,你可以尝试自己做,你会发现不需要双引号。 –

+1

@PaulL:该评论似乎很生硬 – sjsam

3

引用你的变量!

mv apple ap"$name"ple 

或者,你可以使用大括号(仍然在引号):

mv apple "ap${name}ple" 

可能有人会说,引号不是在这种情况下绝对必要的,但我个人认为的好处(一更强大的脚本)超过了成本(只有两个额外的字符)。

+0

大括号不需要双引号 –

+0

是的,以防止分词和全局扩展。 –

+0

刚刚经过'name =“ap *”'和'name =“so me”'的测试,生成的文件是'apap * ple'和'apso meple',无论引号如何。我使用的不是bash,但我相信它们在这方面是兼容的。编辑:我错了!双引号需要在bash中,但不是zsh。 – 0x5453

1

您是否尝试过使用双引号所以..

mv apple ap"$name"ple 
+0

呃!除了我现在所做的格式化之外,我认为这不值得赞成。 – sjsam

-2
mv /path/tofolder/oldfilename /path/tofolder/newname 

如: 如果文件夹是在位于桌面

mv /home/Desktop/apple /home/Desktop/apsomeple 
+1

你看过这个问题吗? –