"xargs bash -ic echo"가 "xargs echo" 또는 "xargs"와 다른 이유는 무엇입니까?

"xargs bash -ic echo"가 "xargs echo" 또는 "xargs"와 다른 이유는 무엇입니까?

나는 주문을 기대한다

ls -d doc/* | grep -P "<some_pattern>" | xargs bash -ic echo

다음을 수행하십시오.

ls -d doc/* | grep -P "<some_pattern>" | xargs echo

ls -d doc/* | grep -P "<some_pattern>"즉, 개행 대신 공백으로만 구분된 일치하는 파일을 제공합니다 .

하지만 출력으로 개행 문자만 얻습니다.

왜 이런거야? 원하는 작업을 수행하도록 첫 번째 명령을 수정하려면 어떻게 해야 합니까?

zsh그런데 실제로는 대신 사용하고 있지만 bash둘 다 작동하지 않습니다.

실제로 "grep"에 지정된 패턴과 일치하는 파일 이름을 가진 여러 파일을 인쇄하고 .zshrc-aliased 명령을 사용하여 인쇄해야 하는 경우 이 기능이 필요합니다.

답변1

Bash 맨페이지에서

   -c string If the -c option is present,  then  commands  are  read  from
             string.   If  there  are arguments after the string, they are
             assigned to the positional parameters, starting with $0.

그래서...

 $ echo a b c d e f g | xargs bash -ic echo

 $ echo a b c d e f g | xargs bash -ic 'echo $0 $@'
 a b c d e f g

관련 정보