bash 산술과 명령 출력을 결합하는 방법은 무엇입니까?

bash 산술과 명령 출력을 결합하는 방법은 무엇입니까?

두 가지 명령이 있다고 가정해 보겠습니다.

첫 번째 명령

let foo=2+2
echo $foo
4

두 번째 순서

date "%s"
1377107324

그것들을 어떻게 결합하겠습니까?


1을 시도해 보세요.

echo The epoch time is: `date +%s` in 100 seconds the time \
     will be: `let future={date +%s}+100` $future

2를 시도해 보세요.

echo The epoch time is: `date +%s` in 100 seconds the time \
     will be: `let future=(date +%s)+100` $future

그 외에 약 30개의 다른 유사한 시도

답변1

이것이 $( )대신 를 사용하는 중요한 이유 입니다 ` `(참조:$(stuff)와 `stuff`의 차이점은 무엇입니까?)

이렇게 중첩하면 let변수도 필요하지 않습니다.

$ echo $(date +%s) " "  $(( $(date +%s)+100 ))
1377110185   1377110285

답변2

$대괄호 앞에 하나를 추가하고 내보내야 합니다 $future.

$ echo The epoch time is: `date +%s` in 100 seconds the time  will be: \
 `let future=$(date +%s)+100; export future` $future
The epoch time is: 1377110177 in 100 seconds the time will be: 1377110252

변수는 bash 인스턴스 간에 공유되지 않습니다. 명령을 실행(또는 백틱)할 때마다 $()상위 셸은 여기에 정의된 변수에 액세스할 수 없습니다.

$ foo=$(echo 12);
$ echo $foo
12
$ foo=(echo 12; foo=0)
$ echo $foo
$ echo $foo
12

보시다시피, foo하위 쉘에서 0으로 설정했지만 $()해당 값은 상위 쉘로 내보내지지 않습니다.

답변3

변수를 선언하고 내보내고 필요에 따라 사용합니다.

date=$( date +%s )
future=$(( $date + 100 ))

echo "The epoch time is: $date in 100 seconds time will be: $future"

이것은 만든다:

The epoch time is: 1377110185 in 100 seconds time will be: 1377110285

다음 값을 계속 사용할 수 있습니다.

echo "which is the same as $(( $date + 100 ))"  

이것은 만든다:

which is the same as 1377110285

스크립트에 있는 경우 내보낼 필요가 없으며 후속 명령에서 사용하기 위해 명령줄에서 내보내면 됩니다.

또는 변수를 함께 유지할 수 있습니다.

echo "The epoch time is: $(date +%s) in 100 seconds the time will be: $(( $(date +%s)+100 ))"

``date+%s'' \$( date +%s )"date+%s"는 매우 유사하지만 이는 이 기사에서 가장 잘 다루는 또 다른 주제입니다.답변

관련 정보