一个bash变量能否有多行?

3

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

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

3

是的,变量可以包含换行符。在使用变量时需要引用它。你可以这样编写脚本:

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

谢谢!在尝试提高我的Bash技能之前,我应该多准备一些引号。;-) - quickbug
如果这个答案对您有帮助,可以考虑接受答案。您也可以参考这里 - devnull

1
以下内容将打印与keyword中的正则表达式匹配的PATH目录。它在子shell中运行,以隔离对IFS所做的更改。
(IFS=:;
 for W in $PATH; do
    if [[ $W =~ $keyword ]]; then
        echo "$W"
    fi
 done
)

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

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


感谢您的帮助。 实际上,我想以相反的方式进行grep。 我也在尝试学习如何使我的bash更易读,特别是通过避免所有间接符号,这使我无法理解我前一天写的内容。 - quickbug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接