bash变量可以是多行的吗?

时间:2013-12-02 13:18:57

标签: linux bash environment-variables multiline

我写了一个脚本来列出路径条目并按关键字过滤它们。我设法让它工作,但我不得不在临时文件中写入列表,因为我不能将它存储在内存中,同时保持换行符。是否有更好/更合适的解决方案?

 #! /bin/bash
tr ':' '\n' <<< $PATH > tmp
if (( $# > 0 )); then
  for W
  do
    grep $W < tmp
  done
else
  cat tmp
fi
rm tmp

3 个答案:

答案 0 :(得分:3)

是的,变量可以包含换行符。您需要在使用变量时引用变量。您的脚本可以写成:

tmp=$(tr ':' '\n' <<< $PATH)
if (( $# > 0 )); then
  for W; do
    grep $W <<< "$tmp"
  done
else
  echo "$tmp"
fi

答案 1 :(得分:1)

以下内容将打印PATH中与keyword中的正则表达式匹配的目录。它在子shell中运行,以隔离对IFS所做的更改。

(IFS=:;
 for W in $PATH; do
    if [[ $W =~ $keyword ]]; then
        echo "$W"
    fi
 done
)

答案 2 :(得分:0)

for W in `echo $PATH | tr ':' '\n'`;
do
   grep <Search pattern> $W
done

检查这是否有助于解决您的问题。