&&
다른 명령(제어 연산자 , ||
및 ;
관련된 다른 명령을 포함하거나 포함하지 않을 수 있음)을 입력으로 사용하고 해당 명령을 "하위 명령"으로 나누는 명령이 있습니까 ?
예를 들어:
echo 1 && ls --invalid-option 2>/dev/null || echo 3
다음과 같이 분류됩니다.
echo 1
ls --invalid-option 2>/dev/null
아니면 어쩌면ls --invalid-option
echo 3
답변1
구문 분석 쉘 구문은 다음과 같습니다.거대한일이 쉽게 끝나지 않는 경우가 많습니다.
그러나 해당 라인을 한 번 실행하려는 경우 다음과 같이 셸에서 실행하도록 할 수 있습니다 set -x
.
wsl@win10:~ $ set -x
wsl@win10:~ $ echo 1 && ls haha &> /dev/null; pwd
+ echo 1
1
+ ls --color=auto haha
+ pwd
/home/wsl
wsl@win10:~ $
아시다시피 alias
확장 기능(실제로는 모든 확장 기능)이라는 주의 사항이 있습니다.
독자들이 실제 명령(힌트: 더하기 기호와 공백으로 시작하는 줄)을 추출하는 것은 방과 후 재미있는 작은 작업이 될 수 있습니다.
답변2
매우 기본적이고 제한된 방식으로 sed를 사용하십시오.
# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
pl " Input data file $FILE:"
head $FILE
pl " Input data file $FILE, invisibles marked:"
cat -A $FILE
pl " Results:"
sed -e 's/[ ]*&&[ ]*/\n/g' -e 's/[ ]*||[ ]*/\n/g' $FILE
생산:
-----
Input data file data2:
one-space && next-one || last-one
one-TAB && next-tab || last-tab
mixed-tabs-space && next-mixed || last-mixed
-----
Input data file data2, invisibles marked:
one-space && next-one || last-one$
$
one-TAB^I&&^Inext-tab^I||^Ilast-tab$
$
mixed-tabs-space ^I && ^I^Inext-mixed^I || ^Ilast-mixed$
-----
Results:
one-space
next-one
last-one
one-TAB
next-tab
last-tab
mixed-tabs-space
next-mixed
last-mixed
이러한 시스템에서는:
OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution : Debian 8.11 (jessie)
sed (GNU sed) 4.2.2
[]에는 탭과 공백이 포함되어 있으므로 이러한 공백 문자는 얼마든지 허용됩니다. 인용된 문자열 등은 고려하지 않습니다.
행운을 빕니다... 건배, drl