1
shell腳本:當WORD是一個變量時,爲什麼在'case WORD in`語句中WORD的字段拆分不會發生?
#!/bin/sh
a="foo bar"
case $a in
"foo bar")
echo case 1
;;
esac
case foo bar in
"foo bar")
echo case 2
;;
esac
與bash
執行這導致下面的輸出和錯誤。
case 1
foo: line 10: syntax error near unexpected token `bar'
foo: line 10: `case foo bar in'
與dash
執行此:
case 1
foo: 10: foo: Syntax error: word unexpected (expecting "in")` leads to the following output and error.
我不明白爲什麼第一case
語句成功,但第二個沒有。
按了POSIX文件在http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_05,將發生在兩種情況下場分裂,所以以後$a
在第一case
聲明擴展到foo bar
,應該是相當於第二個。
所以兩者都應該失敗。爲什麼第一個case
聲明成功?
因爲第一個是單個字符串,第二個不是? – 123
@ 123先觸摸「foo bar」'。然後按照你的邏輯,「a =」foo bar「; ls $ a'應該列出文件'foo bar',但'ls foo bar'應該不能這樣做,因爲第一個是單個字符串,第二個不是「。但實際上,這兩種命令都會因爲[字段拆分](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_05)出現在兩種情況下都失敗,並且在兩種情況下我們都有兩個單詞,而不是一個,場分裂後。 –
你爲什麼爭辯你顯然不明白的東西?看看下面的答案。 – 123