Bash:在while循环中将unix命令的结果存储到变量时出错

时间:2015-05-14 09:23:53

标签: bash unix

我有以下脚本名为test.sh:

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 :: command not found。在while循环的哪一部分我做错了?或者它与tr命令有什么关系?

1 个答案:

答案 0 :(得分: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