이 질문은 이전 질문에 대한 속편입니다 . 이 사이트의 사용자는 for
문자열 값을 반복 하는 bash 루프 를 작성하는 방법을 결정하는 데 도움이되었습니다 . 예를 들어 루프 제어 변수 fname
가 문자열을 반복 한다고 가정합니다 "a.txt" "b.txt" "c.txt"
. echo
"예!"하고 싶습니다 때 fname
값을가 "a.txt"
하거나 "c.txt"
, 및 echo
"아니오!" 그렇지 않으면. 다음 bash 쉘 스크립트를 시도했습니다.
#!/bin/bash
for fname in "a.txt" "b.txt" "c.txt"
do
echo $fname
if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then
echo "yes!"
else
echo "no!"
fi
done
출력을 얻습니다.
a.txt
아니!
b.txt
아니!
c.txt
예!
왜 가치가 if
있을 때 그 진술이 사실로 드러납 니까? 잘못 사용 했습니까 ?fname
"a.txt"
|
3
bash에서 'or'연산자는 '||'입니다. (C 스타일).
—
Marius Cotofana
당신은 또한
—
Thor
-o
같은 내에서 사용할 수 있습니다 [ ]
.
@Thor 내가 선호하는 것
—
jw013
||
및 분리 [ ]
에 걸쳐 -o
있기 때문에 단순히 휴대 성을 위해 [
4 개 이상의 인수를 지원하지 않을 수 있습니다. 물론 대상 언어 인 경우 bash
, 아무도 사용 없어야 [
하기 때문에 어쨌든 bash
의는 [[
여러 가지면에서 우수하다.
@ jw013 감사합니다. 이것은 내가 사용
—
앤드류
if [[ "$fname" = "a.txt" ]] || [[ "$fname" = "c.txt" ]]
하는 것이 아니라 사용해야한다는 것을 의미합니까 if [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ]
?
@Andrew Shebang을로 선언하는 것처럼
—
jw013
bash
이미하고있는 것처럼 맞습니다 . 한 가지 장점은 [[
단어 분리 (특별한 경우)를하지 않기 때문에 [[ $unquoted_var = string ]]
안전하다는 것입니다.