백래시를 놓쳤거나 백 래싱이 너무 많은 프로그래머 인용 반복에서 작동하지 않는 것 같습니다.
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
구함
hello1-hello2-hello3-hello4-hello5-hello6-...
백래시를 놓쳤거나 백 래싱이 너무 많은 프로그래머 인용 반복에서 작동하지 않는 것 같습니다.
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
구함
hello1-hello2-hello3-hello4-hello5-hello6-...
deprecated
따라서 백틱이 사용 $(cmd)
됩니다.
답변:
사용 $(commands)
하는 대신 :
$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))"
hello1-hello2-hello3-hello4
$(commands)
백틱과 동일한 작업을 수행하지만 중첩 할 수 있습니다.
Bash 범위 확장에 관심이있을 수도 있습니다.
echo hello{1..10}
hello1 hello2 hello3 hello4 hello5 hello6 hello7 hello8 hello9 hello10
명령을 평가할 때마다 다음을 사용하십시오 command substitution
.
$(command)
산술 표현식을 평가하려면 언제든지 다음을 사용하십시오 expression substitution
.
$((expr))
다음과 같이 중첩 할 수 있습니다.
다음과 같은 표현식을 평가할 수있는 것보다 file1.txt가 30 줄이고 file2.txt가 10 줄이라고 가정 해 보겠습니다.
$(( $(wc -l file1.txt) - $(wc -l file2.txt) ))
20 (두 파일 사이의 줄 수 차이)을 출력합니다.
중첩에 훨씬 더 친숙한 bash의 $(cmd)
명령 대체 구문 을 사용하면 훨씬 쉽습니다 .
$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))"
hello1-hello2-hello3-hello4
때때로 백틱 중첩은 xargs
및 파이프 로 대체 될 수 있습니다.
$ echo hello4 | xargs echo hello3 | xargs echo hello2 | xargs echo hello1
hello1 hello2 hello3 hello4
이 솔루션의 단점은 다음과 같습니다.
모든 인수는 공백으로 구분됩니다 (로 해결 가능 tr
).
$ echo hello4 | xargs echo hello3 | xargs echo hello2 | xargs echo hello1 | tr ' ' '-'
hello1-hello2-hello3-hello4
다음 명령은 bash에서는 작동하지만 tcsh에서는 작동하지 않습니다 (백틱 중첩은 tcsh에서 잘 처리되지 않음).
$ ls $(dirname $(which bash))
$ ls `dirname \`which bash\``
그들은 다음으로 대체 될 수 있습니다.
$ which bash | xargs dirname | xargs ls