[過去ログ] くだらねえ質問はここに書き込め! Part 234 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
308: 295 2018/12/10(月)01:47 ID:iaZVXIYt(1/2) AAS
>>301-302
そういうことだったんですね
grepにパターンを分割してわたす方法は-eオプションを複数用いるのが
唯一かと思っていましたが、改行区切りでもわたせるんですね
grep $'�n'$'�n'
このようにしても同じことのようですね
ただ
grep $'�n' $'�n'
省4
309: 295 2018/12/10(月)01:48 ID:iaZVXIYt(2/2) AAS
文字間違えました
→ \
310: 295 2018/12/10(月)07:24 ID:rDY5Jm5J(1) AAS
1つ誤解がありましたので訂正します
grep $'\n' $'\n'
とするとスペースの後ろの改行文字自体をファイルとして指定したと
解釈されてエラーになるようです
311: 2018/12/13(木)07:59 ID:BpuyFdNl(1) AAS
age
312: 2018/12/13(木)08:47 ID:YYFyHPut(1/3) AAS
$ echo "
> foo
> bar"
foo
bar
引用符一つ入れると改行できたのね・・・
ヒアストリングも<<<"でできるようだし
echo -eだのprintfだの`cat -`だの色々やってたわ
313(5): 2018/12/13(木)09:47 ID:g4Xg+Gp3(1/5) AAS
[[ -z $hoge ]] や [[ -n $hoge ]]
って必要ですか?
[[ $hoge ]] とか [[ ! $hoge ]] で代用できそうなんですが…
何が違うんでしょ
314(2): 2018/12/13(木)10:41 ID:9d5jxDGh(1/4) AAS
>>313
もし$hogeの値が「-e /dev/null」とかだったらどうするのよ。
315: 2018/12/13(木)11:07 ID:2p8AEIUJ(1/13) AAS
>>314
何も問題ないですよね?
316: 313 2018/12/13(木)11:09 ID:g4Xg+Gp3(2/5) AAS
>>314
自分も試してみましたが、問題ないようです
317(1): 313 2018/12/13(木)12:10 ID:g4Xg+Gp3(3/5) AAS
さらにいろいろ試してみましたが
変数の内容がオプションと解釈されてしまって真偽値に影響がでるケースとして
hoge='-e unknown'
[ $hoge ] || echo null
とやってみるとhogeは空でも未定義でもないのに
nullと表示されてしまい、本来の意図とは違う結果になるようです
ただこれも解決方法があり
[ "$hoge" ] || echo null
とすれば意図したテストができるようです
もとより[[を使えば引用符もいらないみたいですね
省3
318(1): 2018/12/13(木)12:33 ID:2p8AEIUJ(2/13) AAS
>>317
[[ は POSIX非標準。古い新しいではなくbashによって追加された拡張構文
POSIX標準のシェルは対応しない。POSIX標準のシェルには、debianの
デフォルトシェルであるdashやyashやposhがある
どのシェルでも動くようにするならば、[[ は使ってはいけない
319: 313 2018/12/13(木)12:39 ID:g4Xg+Gp3(4/5) AAS
>>318
そうなんですね
じゃあやはりPOSIXの範囲内では[の後に-nや-zを使った方が
変数の内容を意図せずオプションと解釈されてしまう場合でも
エラーになって気づくので安全と言えば安全なのかもしれませんね
うっかり変数を引用符で囲み忘れる場合もあるだろうし
320: 2018/12/13(木)12:47 ID:2p8AEIUJ(3/13) AAS
> じゃあやはりPOSIXの範囲内では[の後に-nや-zを使った方が
俺は使わない。ダブルクォート忘れで困るのは、ここだけじゃない
コマンド呼び出しの、foo "$hoge" "$hage" "$tsuru" "$pika" とかも全部そう。
忘れるとか、そんなもんshellcheckを使えばすぐに解決するんだから気にすることじゃない
そもそもダブルクォートをつけ忘れは、-nや-zを使っても解決しない。
321: 2018/12/13(木)12:52 ID:2p8AEIUJ(4/13) AAS
まあ-zは使うけどな。単に読みやすさのため。
否定というのは場合によっては分かりづらくなる
「空文字なら」 は -z(ゼロの長さなら)で読みやすい
「文字があるの否定」は分かりづらい
「文字がある」はわかりやすいが
-n は no? 文字がノーってことか?で分かりづらい
文字があるという状態を示すために、nを割り当てたやつはセンスがない
322: 313 2018/12/13(木)13:11 ID:g4Xg+Gp3(5/5) AAS
最近の言語を何かしらやってる人間にとっては変数の空文字列チェックを
変数そのものでやるというのも馴染みがあってわかりやすいので
できればそうしたいと思ったんですよね
最初の質問の趣旨に戻りますが、-zや-nを使わなくても同等のテストが
できるということで間違いないなら
[[ $hoge ]] [[ ! $hoge ]]
や
[ "$hoge" ] [ ! "$hoge" ]
の方が個人的には読みやすいかな
よくよく考えたら自分はbashしか使わないので便利な[[で事足りそう
323: 2018/12/13(木)13:17 ID:9d5jxDGh(2/4) AAS
-zや-nは文字列長を判定するのに対して<string>は文字列そのものを判定するっていう違いがあるけど
引用符で囲った場合においてこれらに動作上の違いがあるのか俺には分からん。
少なくとも今のところない。
324: 2018/12/13(木)14:50 ID:YYFyHPut(2/3) AAS
testが[としてbashに内蔵されてて驚く
両方ともなぜか外部コマンドもあって驚く
[[が機能多いのにただのbashの方言で驚く
$ type -a test [ [[
test はシェル組み込み関数です
test は /usr/bin/test です
[ はシェル組み込み関数です
[ は /usr/bin/[ です
[[ はシェルの予約語です
325(1): 2018/12/13(木)16:04 ID:2p8AEIUJ(5/13) AAS
> testが[としてbashに内蔵されてて驚く
[ が内蔵されてないシェルなんて知らんのだが?
そんなもん現実に存在するのか?
326(1): 2018/12/13(木)16:21 ID:9d5jxDGh(3/4) AAS
>>325
つ外部リンク:www.unix.com
327: 2018/12/13(木)16:33 ID:2p8AEIUJ(6/13) AAS
>>326
マニュアルが有るのはわかったが、
シェルはどこに存在してるんだ?
上下前次1-新書関写板覧索設栞歴
あと 675 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.024s