Bash 如何使用awk标记$PATH?

Bash 如何使用awk标记$PATH?,bash,awk,Bash,Awk,如何使用awk标记$PATH 我试了3个小时,但完全失败了 #!/bin/bash i=1 while true; do token=$($echo $PATH | awk -F ':' '{print $"$i"}') if [ -z "$token" ]; then break fi ((i++)) if [ -a "$TOKEN/$1" ]; then echo "$TOKEN/$1" break fi break d

如何使用awk标记$PATH

我试了3个小时,但完全失败了

#!/bin/bash

i=1

while true; do
  token=$($echo $PATH | awk -F ':' '{print $"$i"}')

  if [ -z "$token" ]; then
    break
  fi  

  ((i++))

  if [ -a "$TOKEN/$1" ]; then
    echo "$TOKEN/$1"
    break
  fi  

  break
done
当我运行这个代码时,我得到了

/home/$USERID/bin/ff: line 6: /home/$USERID/bin:/usr/local/symlinks:/usr/local/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/$USERID/bin: No such file or directory

如何更改我的程序?

用awk完成整个过程

#!/bin/bash

awk -v addPath="$1" 'BEGIN{RS=":";ORS=addPath "\n"}{$1=$1}1' <<< $PATH
概念证明
用awk做这件事

#!/bin/bash

awk -v addPath="$1" 'BEGIN{RS=":";ORS=addPath "\n"}{$1=$1}1' <<< $PATH
概念证明
我认为简单的tr:\\n就足够了。用sed's$blablag'来添加一些东西到行中,就是这样。

我认为简单的tr:\\n就足够了。用sed's$blablag'来添加一些东西到行中,就这样。

你想做什么

这将允许您对各个路径进行迭代:

echo $PATH | tr ':' '\n' | while read line; do echo $line; done
正如@SiegeX所指出的,一个更简短的版本可以工作

echo $PATH | while read -d ':' line; do echo $line; done

你想干什么

这将允许您对各个路径进行迭代:

echo $PATH | tr ':' '\n' | while read line; do echo $line; done
正如@SiegeX所指出的,一个更简短的版本可以工作

echo $PATH | while read -d ':' line; do echo $line; done

您不需要使用外部工具(如awk或tr)来标记路径。Bash能够做到这一点:

#!/bin/sh

IFS=:
for p in $PATH
do
    if [ -a "$p/$1" ]; then
        echo "$p/$1"
        break
    fi
done

IFS是bash内置的变量,bash将其用作输入字段分隔符IFS。

您不需要使用外部工具(如awk或tr)来标记路径。Bash能够做到这一点:

#!/bin/sh

IFS=:
for p in $PATH
do
    if [ -a "$p/$1" ]; then
        echo "$p/$1"
        break
    fi
done

IFS是bash的内置变量,bash将其用作输入字段分隔符IFS。

是否将$echo设置为某个值?或者您是说echo没有$?错误消息实际上是由美元符号引起的。由于$echo是一个空变量,它试图以命令的形式执行路径。是否将$echo设置为某个值?或者您是说echo没有$?错误消息实际上是由美元符号引起的。因为$echo是一个空变量,所以它试图以命令的形式执行路径。。。添加那个版本。@lymose:我相信我有你要找的东西。请看一看。果然。。。添加那个版本。@lymose:我相信我有你要找的东西。请看一看,谢谢。这正是我想要的wanted@lymose没问题。请单击计票旁的“复选标记”,选择最能解决您问题的答案。欢迎光临,谢谢。这正是我想要的wanted@lymose没问题。请单击计票旁的“复选标记”,选择最能解决您问题的答案。欢迎来到SO。@lymose:我添加了if。。。按您想要的方式进行阻塞。最初我把它漏掉了,因为我认为它应该是显而易见的。@lymose:我加上了if。。。按您想要的方式进行阻塞。我最初把它漏掉了,因为我认为它应该是显而易见的。