【问题标题】:Bash - get basename from loopBash - 从循环中获取基本名称
【发布时间】:2013-11-26 10:15:41
【问题描述】:

我试图从循环中获取basename,但这只会返回我"*"

FILES=("/home/aaaa/bbbb/*") #Get all folders
for f in "${FILES[@]}"
do
  basename "$f"
done

我做错了什么?

【问题讨论】:

  • 考虑到任何一个答案作为您查询的解决方案,直接“ ls -1 /home/aaaa/bbbb/ ”不会导致您的预期结果吗?

标签: bash shell ssh debian


【解决方案1】:

你甚至不需要像这样创建一个数组并执行你的循环:

for f in /home/aaaa/bbbb/*
do
  # get the basename using pure BASH
  base="${f##*/}"
  echo "base is: $base"
done

【讨论】:

  • 这适用于带有空格的文件名。分词后发生路径名扩展。
  • 要返回数组,names=(/home/aaaa/bbbb/*); basenames=( "${names[@]##*/}") 也可以。不需要显式循环。
【解决方案2】:

通过使用("/home/aaaa/bbbb/*"),只使用一个文字字符串"/home/aaaa/bbbb/*" 创建一个数组。

相反,去掉引号,简单地说:

FILES=(/home/aaa/bbb/*)
for f in "${FILES[@]}"
do
  basename "$f"
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多