두 가지 명령이 있다고 가정해 보겠습니다.
첫 번째 명령
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"는 매우 유사하지만 이는 이 기사에서 가장 잘 다루는 또 다른 주제입니다.답변