2015-05-14 40 views
-1

我呼籲test.sh以下腳本:擊:錯誤存儲UNIX命令變量的結果,當在while循環

echo "file path is : $1" 
path=$1 
while read -r line 
do 
    num=$($line | tr -cd [:digit:]) 
    echo num 
done < $path 
exit 0 

我試圖搶位在文件的每一行的開始存儲爲$ path。最終的結果將循環每一行,抓住數字,並從文件中刪除,如果它小於2.

每次我運行此循環時,我得到錯誤「./test.sh:line 5 :命令沒有發現哪一部分while循環的,我做錯了或者是它的東西做的tr命令

+2

你需要'NUM = $(回聲 「$線」 | TR-CD [:數字:])'' – anubhava

回答

1

我能發現的幾件事情錯了你的腳本:??

#!/bin/bash 

echo "file path is : $1" 
path=$1 
while read -r line 
do 
    num=$(tr -cd '[:digit:]' <<<"$line") # use here string to "echo" variable to tr 
    echo "$num" # added quotes and $ 
done < "$path" # added quotes, changed $dest to $path 

總結:

  • cmd <<<"$var"(這裏是字符串)是內置的bash設計作爲echo "$var" | cmd的替代品。我將#!/bin/bash添加到腳本的頂部,因爲我正在使用此bash專用功能。
  • 我已經引用了你的變量來防止分詞和全局擴展的問題。
  • 我做了一個假設,你真的打算在最後一行使用$path(雖然我可能是錯的)。
  • 最後,腳本結尾處不需要exit 0
+0

[:數字:]'應該被引用,以避免外殼將其擴大到匹配的文件名。 – geirha

+0

@geirha很好發現,我編輯過。謝謝 –