PATH=/opt/omd/sites/icinga/var/TEST
FLAG="$PATH/$1_$3.flag" | tr -d \'
작은따옴표가 있는데 $3
이를 제거하고 싶습니다. 따라서 위의 tr -d \'
.
다음으로 다음을 실행했습니다.
/bin/touch $FLAG
그리고 얻다:
/bin/touch: missing file operand Try '/bin/touch --help' for more information.
나도 시도했다
/bin/touch "$FLAG"
하지만 문제가 no such file or directory
발생했습니다. 누구든지 나를 안내할 수 있나요?
답변1
두 가지 질문이 있습니다.
주요 문제:
변수 할당작동하지 않습니다당신이 생각하는 것처럼 :
FLAG="$PATH/$1_$3.flag" | tr -d \'
이는 로 구분된 두 개의 명령입니다 pipe
. 이는 첫 번째 명령(변수 할당)의 출력을 두 번째 명령( )으로 보내는 것을 의미합니다 tr
. 두 번째 명령은 단순히 결과를 인쇄합니다. 변수 할당의 출력이 비어 있으므로 의 출력 tr
도 비어 있습니다.
변수 할당은 실제로 작동하지만 의 일부이기 때문에 pipe
별도의 프로세스에서 실행되며 touch
기본 프로세스(예를 들어 그 뒤의 명령 포함)에 액세스할 수 없습니다.
명령을 포함한 변수 할당에는 다음을 사용해야 합니다.명령 대체:
FLAG="$(printf '%s' "$PATH/$1_$3.flag" | tr -d \')"
두 번째 용어변수 를 재정의한다는 것입니다 PATH
.
PATH=/opt/omd/sites/icinga/var/TEST
FLAG="$PATH/$1_$3.flag" | tr -d \'
이제 tr
작동하지 않으며 다음 오류가 발생합니다.
tr: command not found
좋은 추가 정보도 얻었지만 이는 bash
Ubuntu일 수 있습니다.
Command 'tr' is available in the following places
* /bin/tr
* /usr/bin/tr
The command could not be located because '/usr/bin:/bin' is not included in the PATH environment variable.
이 문제를 해결하려면 다음과 같은 문제도 발생하지 마십시오.유제, 따르다bash 변수 명명 규칙:
path=/opt/omd/sites/icinga/var/TEST
flag="$(printf '%s' "$path/$1_$3.flag" | tr -d \')"