공백이 포함된 파일 이름에 대한 백틱 대체

공백이 포함된 파일 이름에 대한 백틱 대체

예를 들어 공백이 포함된 파일 이름이 있다고 가정합니다 with space. "공백 포함"을 인수로 허용하는 cmd다음 코드 조각에서는 무엇을 출력해야 합니까 ?ls

$ ls `cmd`

나는 노력했다 ls `echo 'with space'`. 에 전달된 매개변수는 및 ls입니다 . 백슬래시를 사용하여 공백을 벗어나려고 해도 작동하지 않습니다. 나는 사용이 효과가 있음을 본다. 그러나 공백을 포함할 수 있는 일부 파일에 여러 파일을 인수로 전달하려는 경우에는 작동하지 않습니다 .'withspace'ls "`cmd`"ls

명령 대체에 대한 매뉴얼도 드물게 나타납니다.https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html

보다 일반적으로 cmd가 다른 명령에서 사용하기 위해 백틱 대체를 사용하여 대체할 수 있는 파일 목록을 출력하려는 ​​경우 cmd가 따르는 출력 형식은 무엇입니까?

답변1

나는 사용이 ls "`cmd`"효과가 있음을 본다. 그러나 여러 파일을 ls에 대한 인수로 전달하려는 경우에는 작동하지 않으며 그 중 일부에는 공백이 포함될 수 있습니다.

좋아요. 이는 명령을 변수에 저장하는 것과 동일한 문제입니다(이미 논의됨).예를 들어 여기), 정말 잘 할 수 없습니다. 생각나는 옵션은 다음과 같습니다.

  • cmdNUL로 구분된 파일 이름 목록을 출력 하고 xargs -0이를 다른 명령으로 파이프합니다.
  • IFS어떤 파일명에도 나오지 않는 문자로 설정하고 , cmd이것으로 구분하여 파일 목록을 출력한다.
  • 출력은 cmd셸에서 올바르게 인용한 다음 eval.

이와 같이:

$ touch "with space" "another space"
$ printf "%s\0" "with space" "another space" | xargs -0 ls -i
1705749 another space  1705230 with space
$ set -f; IFS=%; ls -i $(echo "with space%another space")
1705749 another space  1705230 with space
$ eval ls -i "$(echo '"with space" "another space"')"
1705749 another space  1705230 with space

find -exec ...아니면 교체가 가능하다면 사용하세요 cmd.

관련 정보