이 명령을 실행하기 위해 .bashrc에 함수를 만들려고 합니다.
lspci -kvnn | sed -n '/VGA/,/^$/ p'
, 이는 VGA
첫 번째 매개변수로 대체됩니다 $1
.
이것이 내가 생각해낸 것입니다:
lsp(){
sed_str="'/$1/,/^$/ p'"
echo $sed_str
lspci -kvnn | sed -n $sed_str
return
}
export -f lsp
문제 해결을 위해 함수가 실패하는 이유를 이해할 수 없습니다. echo $sed_str
출력은 첫 번째 명령의 정규식과 똑같습니다.sed는 여전히 불평합니다.
[user@linux ~]$ lsp VGA
'/VGA/,/^$/ p'
sed: -e expression #1, char 1: unknown command: `''
[user@linux ~]$
아마도 여기서는 볼 수 없는 뭔가가 분명 있을 것입니다.
커널 및 셸:
uname -r -> 5.8.14-arch1-1
echo $SHELL -> /bin/bash
답변1
따옴표는 단지 구분된 것이 아니라 문자열에 포함됩니다. 문자열을 정의하고 사용하려면 따옴표를 사용해야 합니다.
lsp(){
sed_str="/$1/,/^$/ p"
echo $sed_str
lspci -kvnn | sed -n "$sed_str"
return
}
export -f lsp
답변2
>>> sed_str="/$1/,/^\$/p"
>>>> lspci -kvnn | sed -n "$sed_str"
작은따옴표가 문제의 원인입니다. 또한 $sed_str
확장 후 단어 분리 및 파일 이름 확장을 방지하기 위해 변수를 큰따옴표로 묶어야 합니다 .
변수를 인용하지 않았기 때문에 쉘에 다음과 같이 나타납니다.
... ¦ sed -n '/VGA/,/^$/ 'p
arg1 = -n
arg2 = '/VGA/,/^$/
arg3 = 'p
2와 3은 sed에 적합하지 않으며 이에 대해 불평하고 있습니다. '
그것은 sed 명령이라고 생각합니다 .