나는 종종 내가 제공하는 인수에 괄호가 포함된 명령줄 프로그램을 사용합니다. 간단히 말해서 내가 글을 쓴다고 가정해보자.
echo 'bar(1,3)'
따옴표를 생략하고 싶습니다. 그러나 이렇게 하면 syntax errror near unexpected token '('
서브쉘과 관련이 있는 것 같습니다. 그것이 유일한 방법이라면 기꺼이 비활성화하겠습니다. (명령 시작 부분이 아닌 경우 하위 쉘을 시작할 수 없지만 내가 아는 한 인수에서 괄호를 허용하지 않을 이유가 없습니다.)
답변1
(
다음을 포함하여 많은 연산자에 사용되는 )
구문의 특수 표시 문자입니다 .bash
(...)
서브쉘 구조func() compound-command
기능 정의$(...)
명령 대체<(...)
,>(...)
프로세스 대체((...))
산술 평가 구조$((...))
산술 확장a=(...)
,a+=(...)
배열 할당 연산자@(...)
,+(...)
,*(...)
,?(...)
glob 연산자(extglob 사용)[[ (a && b) || (c && d) ]]
그룹 조건식 연산자[[ ... =~ ...(...)... ]]
정규식 연산자.
echo a=(b)
문법 오류이지만 그렇지 않습니다 export a=(b)
.
echo a)
(
위 구문 중 하나의 처음 몇 줄에 공백이 없으면 구문 오류입니다.
(
구문 오류를 피하기 위해 필요한 곳에 따옴표를 추가하는 readline 후크를 작성하는 것이 가능하지만 )
이는 쉘 구문의 완전한 구문 분석을 의미하므로 상당한 노력이 필요합니다.
현재 단어에 쉘 특정 문자가 포함되어 있다는 사실을 너무 늦게 깨달은 경우 현재 단어를 참조하는 단축키를 사용하는 것이 더 나은 접근 방식일 수 있습니다.
AND zsh
( emacs
패턴 가정):
bindkey -s '\e#' '\C@\eb\Cx\Cx\e"'
Alt+#현재를 참조하십시오단어.
또는 대략적으로 bash
(모드를 가정하여 emacs
):
bind "\"\e#\": \"'\e \eb'\C-X\C-X\""
답변2
이것은 아마도 나쁜 생각일 것입니다(주석 참조). 그러나 동일한 문제가 있었고 사용하기 전에 합계 [
로 변경되는 함수를 만들어 해결했습니다 .(
]
)
echo2() {
expression=$(echo $@ | tr '[]' '()')
echo "$expression"
}
입력하다:
echo2 bar[1,3]
결과:
bar(1,3)
[
와 가 ]
쉘에 의해 특별히 처리되는지 는 모르겠습니다 . 그러나 (
기능 대신 이를 사용하려는 경우 )
아마도 이것이 솔루션일 수 있습니다.