なぜbashは&&で変数を1行にエコーする必要があるのですか?


12

なぜ 戻るSOMETHING=1 && echo $SOMETHING必要&&がある1
なぜSOMETHING=1 echo $SOMETHING戻らない1


7
特に建設的なフィードバックを残さずに、質問に反対票を投じた人を恥じてください。これは有効な質問であり、bashが単語/パラメータ/変数/チルダ展開とコマンド実行を実行する順序は注意が必要です。+1を差し上げます。
Spiff 2015


技術的には、「echo 1」は0を返し、出力は1 ...です。つまり、「echo」はステータス「0」で終了し、引数を標準出力するように表示されます。「returns 1」という言い回しは、「出力」ではなく「出口状態」を意味しており、一見すると少し混乱していました。
マイケル

回答:


8

なぜなら、bashは変数割り当てステートメントを解釈する前に変数展開を行うからです。したがって、SOMETHINGは以前に定義されていなかったため、コマンドは次のようになります...

SOMETHING=1 echo ''

…それから実行されます。


変数展開は変数置換と同じですか?
Joel、

1
@JoelL:正解
ゴードン

0

エクスポートとエコーを同時に行う

root@kali:~# echo ${SOMETHING=1}
1
root@kali:~# echo $SOMETHING
1
root@kali:~# unset SOMETHING
root@kali:~# echo $SOMETHING

root@kali:~# echo ${SOMETHING=1}
1
root@kali:~# 

別の間抜けな例xD

root@kali:~# echo ${SOMETHING=1} ${PLUS=+} ${SUMTHIN=2} ${EQUALS==} && expr $SOMETHING $PLUS $SUMTHIN
1 + 2 =
3
root@kali:~# 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.