2016-07-06 59 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

你看過這個問題嗎? –