2015-05-14 33 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很好发现,我编辑过。谢谢 –