입력에 공백이 있는 줄은 명령에 대한 따옴표로 사용합니다.

입력에 공백이 있는 줄은 명령에 대한 따옴표로 사용합니다.

오늘은 게을러서 이 작업을 수행할 수 있는 간단한 솔루션을 찾고 있습니다. 공백을 포함하여 여러 줄을 입력하세요. 명령을 실행할 때 해당 행을 따옴표로 묶어야 합니다. 나는 이것이 여기에서 여러 번 요청되었다고 확신하므로 해결책의 방향을 알려주십시오.

예:

Aaa aaa
Bbb bbb
Ccc ccc

실행해야 합니다 command "Aaa aaa" "Bbb bbb" "Ccc ccc".

문제에 관한 내용은 다음과 같습니다."dnf 업데이트" 중에 "dnf groupupdate" 패키지가 표시되지 않는 이유는 무엇입니까?

나는 다음을 제공했습니다:

# the first line is informational and redundant, thus tail
# each group is in a separate line
dnf -q group list --installed | tail -n +2 | while read group; do dnf group upgrade "$group"; done

하지만 각 그룹별로 개별적으로 실행되므로 dnf upgrade모든 그룹을 한 번에 업그레이드하는 것보다 시간이 더 걸립니다.

답변1

따옴표는 C, Perl 또는 sh와 같은 일부 프로그래밍 언어의 구문의 일부입니다.

이 줄 주위에 따옴표를 붙이고 싶지 않고, 일부 프로그래밍 언어의 구문(예: sh / perl에는 나중에 설명할 참조 연산자가 포함되어 있습니다.

xargs목적 은 다음과 같습니다 .

xargs -rd '\n' -a file.list some-command --

-r, -d, 및 는 -aGNU 확장입니다.

xargssome-command한 번에 전달할 수 있는 인수 수에 대한 제한을 해결하기 위해 여러 번 실행될 수 있습니다 .

답변2

이것은 추악하지만 Bash에서는 작동합니다.

groups=()
while read -r group; do groups+=$group; done < \
  <(sudo dnf -C -q group list --installed | tail -n +2)
sudo dnf group upgrade "${groups[@]}"

답변3

내가 선택할 수도 있겠네요스테판 샤젤라스의 변주곡GNU가 있었다면 xargs. 그러나 내 메인 시스템에는 GNU가 없기 때문에 xargs다음 줄을 입력하기 전에 다음 줄을 인용해야 합니다 xargs.

$ sed -e 's/^/"/' -e 's/$/"/' file | xargs printf '<%s>\n'
<Aaa aaa>
<Bbb bbb>
<Ccc ccc>

이는 입력에 다른 큰따옴표가 없다고 가정합니다. 사용자에 따라 xargs입력이 비어 있는지 여부에 관계없이 유틸리티를 한 번 이상 실행할 수도 있습니다 xargs(참조xargs에 입력이 제공되지 않으면 xargs가 유틸리티를 실행하지 않도록 합니다.).

관련 정보