「set --」的用法? [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



「set --」的用法?
會員二級
註冊日期:
2015/11/16 9:07
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 137
MP : 19 / 1626
EXP: 48
離線
您好:請問 以下程式碼中
1. set -- "$dir"/* 的
set --
該如何解釋?
set 可以取得 Shell的環境變數
但 set -- ,這又該如何解釋!

2.
for name do
echo $name
done

一般 name 不用做路徑設定,他就會抓該目錄下的 所有檔案嗎?

謝謝!

2016/3/29 8:20
應用擴展 工具箱
回覆: 「set --」的用法?
管理員
註冊日期:
2011/3/11 6:32
所屬群組:
討論區管理群
等級: 44
HP : 216 / 1084
MP : 1088 / 27724
EXP: 38
離線
您可以參考 GNU Bash 的使用手冊

Bash Reference Manual
https://www.gnu.org/software/bash/manual/bashref.html

2016/3/29 8:42
本篇發表文章以「創用CC BY 3.0 或更新之台灣地區版本」授權條款釋出,如何使用敬請參考
 Creative Commons — 姓名標示 3.0 台灣 — CC BY 3.0 TW
 http://creativecommons.org/licenses/by/3.0/tw/

「你不懂的東西就不要亂講,被懂得人看破手腳就算了,騙不懂的人誤導別人,還要別人把你當成大師,這就真的是說不過去了。」
 by Allen Own
 出處 http://www.plurk.com/p/i4uogm

自由知識創作平台介紹
 https://docs.google.com/document/d/1MGG6lW_0qCgH4U785R-IwSc_INdoBGej1l-JxiA4gPE
如何建立新的自由知識創作平台文件
 https://docs.google.com/document/d/11NdzOW2lGYksfyQIcPMPye5tlmj1J0QTkgPTmQvIvKA
應用擴展 工具箱
回覆: 「set --」的用法?
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 35
HP : 171 / 855
MP : 588 / 19065
EXP: 21
離線
備份連結

=============================================

wayout 寫到:
您好:請問 以下程式碼中
1. set -- "$dir"/* 的
set --
該如何解釋?
set 可以取得 Shell的環境變數
但 set -- ,這又該如何解釋!

2.
for name do
echo $name
done

一般 name 不用做路徑設定,他就會抓該目錄下的 所有檔案嗎?

謝謝!


# Another way

範例一


#/usr/bin/env sh
for name in *; do
echo $name
done



範例二


#/usr/bin/env sh
for name in ./*; do
echo $name
done


2016/3/29 9:53
應用擴展 工具箱
回覆: 「set --」的用法?
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 35
HP : 171 / 855
MP : 588 / 19065
EXP: 21
離線
備份連結

============================================

範例一


#/usr/bin/env sh
set -- *
for name do
echo $name
done



範例二


#/usr/bin/env sh
set -- ./*
for name do
echo $name
done


2016/3/29 10:02
應用擴展 工具箱
回覆: 「set --」的用法?
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 35
HP : 171 / 855
MP : 588 / 19065
EXP: 21
離線
備份連結

==================================================

執行


$ help for



顯示


for: for NAME [in WORDS ... ] ; do COMMANDS; done
Execute commands for each member in a list.

The `for' loop executes a sequence of commands for each member in a
list of items. If `in WORDS ...;' is not present, then `in "$@"' is
assumed. For each element in WORDS, NAME is set to that element, and
the COMMANDS are executed.

Exit Status:
Returns the status of the last command executed.



look


If `in WORDS ...;' is not present, then `in "$@"' is
assumed.


2016/3/29 10:11
應用擴展 工具箱
回覆: 「set --」的用法?
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 35
HP : 171 / 855
MP : 588 / 19065
EXP: 21
離線
備份連結

=============================================

執行


$ help set



顯示


set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
Set or unset values of shell options and positional parameters.

Change the value of shell attributes and positional parameters, or
display the names and values of shell variables.

Options:


...略...

-- Assign any remaining arguments to the positional parameters.
If there are no remaining arguments, the positional parameters
are unset.

...略...




範例一

「test.sh」


#/usr/bin/env sh

echo $@

set -- a b c

echo $@



執行


$ ./test.sh 1 2 3



或是執行


$ bash test.sh 1 2 3



或是執行


$ sh test.sh 1 2 3



顯示


1 2 3
a b c




範例二


#/usr/bin/env sh

echo $@

set -- *

echo $@



測試方法同上


「*」的用法參考「Pathname expansion

2016/3/29 10:36
應用擴展 工具箱
回覆: 「set --」的用法?
會員二級
註冊日期:
2015/11/16 9:07
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 137
MP : 19 / 1626
EXP: 48
離線
您好:
謝謝您,想再請教
若 設定set -- * 後,會抓所有參數 補進去
但這會暫留, 一般要如何 取消 -- * 的結果呢?

我有用 set --
但他似乎還有傳遞1個 參數
謝謝!

2016/3/31 13:38
應用擴展 工具箱
回覆: 「set --」的用法?
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 35
HP : 171 / 855
MP : 588 / 19065
EXP: 21
離線
備份連結

=============================================

wayout 寫到:
您好:
謝謝您,想再請教
若 設定set -- * 後,會抓所有參數 補進去
但這會暫留, 一般要如何 取消 -- * 的結果呢?

我有用 set --
但他似乎還有傳遞1個 參數
謝謝!


範例一


#!/usr/bin/env sh

set -- *

set --

echo a"$@"b




我這邊測,顯示的是


ab



也就是 "$@" 沒有東西。

所以不懂你指的「他似乎還有傳遞1個 參數」?

要請你多說點發生的狀況,或是方便的話,貼出你測試的程式碼吧,可以幫忙看是哪裡出狀況。



「$ help set」的說明


-- Assign any remaining arguments to the positional parameters.
If there are no remaining arguments, the positional parameters
are unset.




範例二


#!/usr/bin/env sh

set -- *

set --

echo 'a'

for name do

echo $name

done

echo 'b'



我這邊測試顯示


a
b



表示沒跑迴圈,所以"$@"也是沒東西。

2016/3/31 14:12
應用擴展 工具箱
回覆: 「set --」的用法?
會員二級
註冊日期:
2015/11/16 9:07
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 137
MP : 19 / 1626
EXP: 48
離線
您好:
謝謝您,我再看看!

2016/4/1 10:25
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.