Bash

這個腳本在做什麼?

  • February 15, 2020
#!/bin/bash

echo 123456789 > out.txt
exec 3<> out.txt
read -n 4 <&3
echo -n 5 >&3
exec 3>&-

在面試筆試中被問到劇本末尾out.txt的內容。我確實執行了腳本後記,它給了我123456789. 但是我不知道腳本中發生了什麼,尤其是帶有 exec 語句的部分。我查找了聯機幫助頁和Google搜尋結果,exec但找不到任何內容3<>。精通shell腳本的人可以解釋這裡發生了什麼嗎?

echo 123456789 > out.txt將字元串寫入文件123456789out.txt

exec 3<>out.txt構造打開文件out.txt進行讀寫<>並將其附加到文件描述符#3。

read -n 4 <&3讀取 4 個字元。

echo -n 5 >&3寫入 5(將 5 替換為 5)。

exec 3>&-關閉文件描述符#3。

導致

cat out.txt
123456789

關於execint的部分bash(1)指出:

**exec [-cl] [-a name] [command [arguments]]**如果command指定,它將替換外殼。

$$ … $$ 如果command未指定,則任何重定向都在目前 shell 中生效$$ … $$.

引用自:https://unix.stackexchange.com/questions/567814