【问题标题】:command line parameters separated by null character以空字符分隔的命令行参数
【发布时间】:2013-09-15 12:21:42
【问题描述】:

由于文件名可能包含空格和换行符\n,我使用空字符作为字段分隔符。但是我不知道怎么对find说输入目录是空字符分隔的。

我的失败尝试:

foo()
{
  IFS='\0'
  find "$@"
}

$ mkdir 'oneword' 'two words'
$ IFS='\0' foo $(realpath -z 'oneword' 'two words')

如何告诉find输入目录用零分隔?

【问题讨论】:

    标签: bash shell parameters realpath ifs


    【解决方案1】:

    一种方法是使用 xargs:

    realpath -z 'oneword' 'two words' | xargs -0 find
    

    或者:

    foo() {
      local A=() I=0 IFS=''
      while read -rd $'\0' A[I++]; do :; done 
      find "${A[@]}"
    }
    realpath -z 'oneword' 'two words' | foo  ## Under subshell or pipe
    foo < <(realpath -z 'oneword' 'two words')  ## No subshell
    

    如果需要,您可以使用另一个 fd:

    foo() {
      local A=() I=0 IFS=''
      while read -rd $'\0' -u 4 A[I++]; do :; done 
      find "${A[@]}"
    }
    foo 4< <(realpath -z 'oneword' 'two words')
    

    注意:使用 IFS 将变量的值拆分为多个参数可能会导致路径名扩展,这是不值得称赞的。它还需要修改 IFS,这可能会影响其他功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 2021-12-23
      • 1970-01-01
      • 2019-06-11
      相关资源
      最近更新 更多