2014-11-05 150 views
1

我的合作伙伴和我遇到了這個基本的Linux腳本的麻煩。我們的教師在我們身上傾倒了一個高級的Linux腳本包來進行調試,我們都很迷茫。該腳本假設刪除文件名中包含嵌入空格的文件,並且卡在實際的rm命令上。我得到「失蹤的操作數」,我不知道該怎麼做。Linux rm命令與變量

#!/bin/bash 

# This script is supposed to delete all filenames in current directory 
#+ containing embedded spaces. 
# It doesn't work 
# Why not? 


badname= ls | grep " " 

# Try this: 
echo "$badname" 

rm "$badname" 

exit 0 
+0

你會得到什麼錯誤或消息? – 2014-11-05 17:33:27

回答

1

您需要命令substition得到的ls | grep " "價值爲badname變量

以下選項要麼將工作:

badname=`ls | grep " "` 

badname=$(ls | grep " ") 

你可以閱讀更多關於命令替換here。 希望這會有幫助

+0

我得到以下錯誤「badname = ls | grep」「」 我不認爲聲明變量時存在問題,因爲腳本實際上會回顯要刪除的文件。我認爲問題在於rm命令。感謝您的迴應! – 2014-11-05 17:40:55

+0

這看起來不像bash會給你的錯誤。 – ptierno 2014-11-05 17:42:05

+0

你告訴badname它等於文本'ls | grep'「'這就是爲什麼它迴應它。您沒有正確分配變量。你需要命令替換來獲取'ls |的值grep「」進入變量。閱讀答案中的鏈接。 – ptierno 2014-11-05 17:58:37

0

badname= ls | grep " "顯然是錯誤的。試試這個:

#!/bin/bash 
TMPFILE="tmp.txt" 

ls | grep " " > $TMPFILE 

cat $TMPFILE | while read -r LINE 
do 
     rm "$LINE" 
done 
+0

這工作正常,但我不認爲這是他想要的,因爲它與原來的差別很大。他不在這裏,所以我不能問他。我認爲badname = ls | grep「」正常工作,因爲它實際上回應了錯誤的文件名,它只是不會刪除它們。 – 2014-11-05 17:51:34