1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878
|
.if \n(zZ=1 .ig zZ
.\"
.\" MAN PAGE COMMENTS to
.\"
.\" Chet Ramey
.\" Case Western Reserve University
.\" chet@po.cwru.edu
.\"
.\" Last Change: Tue Dec 28 13:41:43 EST 2010
.\"
.\" bash_builtins, strip all but Built-Ins section
.if \n(zY=1 .ig zY
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\"
.\" Translated Wed Apr 7 22:55:11 JST 1999
.\" by FUJIWARA Teruyoshi <fujiwara@linux.or.jp>
.\" Proofed by
.\" Shinya Hanataka <hanataka@abyss.rim.or.jp>
.\" NAKANO Takeo <nakano@apm.seikei.ac.jp>
.\"
.\" Updated to 2.04 Sun Apr 1 2001
.\" by the members of JM Project (JM@linux.or.jp)
.\" Satoshi Asakawa <asakawa@kanagawa.hitachi.co.jp>
.\" Shinya Hanataka <hanataka@abyss.rim.or.jp>
.\" Akihiro Motoki <mokkun@iname.com>
.\" NAKANO Takeo <nakano@apm.seikei.ac.jp>
.\" Yuichi SATO <sato@complex.eng.hokudai.ac.jp>
.\" Kentaro Shirakata <argrath@ub32.org>
.\" TAKEI Nobumitsu <takei@webmasters.gr.jp>
.\" UCHIDA Norihiro <KY4N-UCD@asahi-net.or.jp>
.\"
.\" Updated to 2.05 Sat 14 Apr 2001
.\" by NAKANO Takeo
.\"
.\" Updated to 4.2 Thu 8 Sep 2011
.\" by Masakazu Takahashi <emasaka@gmail.com>
.\"
.TH BASH 1 "2010 December 28" "GNU Bash\-4.2"
.de }1
.ds ]X \&\\*(]B\\
.nr )E 0
.if !"\\$1"" .nr )I \\$1n
.}f
.ll \\n(LLu
.in \\n()Ru+\\n(INu+\\n()Iu
.ti \\n(INu
.ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X
.br\}
.el \\*(]X\h|\\n()Iu+\\n()Ru\c
.}f
..
.\"
.\" There's some problem with having a `@'
.\" in a tagged paragraph with the BSD man macros.
.\" It has to do with `@' appearing in the }1 macro.
.\" This is a problem on 4.3 BSD and Ultrix, but Sun
.\" appears to have fixed it.
.\" If you're seeing the characters
.\" `@u-3p' appearing before the lines reading
.\" `possible-hostname-completions
.\" and `complete-hostname' down in READLINE,
.\" then uncomment this redefinition.
.\"
.de FN
\fI\|\\$1\|\fP
..
.\"
.\" File Name macro. This used to be `.PN', for Path Name,
.\" but Sun doesn't seem to like that very much.
.\"
.SH 名前
bash \- GNU Bourne\-Again SHell
.SH 書式
\fBbash\fP [options] [file]
.SH 著作権
.if n Bash is Copyright (C) 1989-2011 by the Free Software Foundation, Inc.
.if t Bash is Copyright \(co 1989-2011 by the Free Software Foundation, Inc.
.SH 説明
\fBbash\fP は、標準入力やファイルから読み込んだコマンドを実行する、 \fBsh\fP 互換のコマンド言語インタプリタです。 \fBbash\fP
には、\fIKorn\fP シェルや \fIC\fP シェル (\fBksh\fP や \fBcsh\fP) の便利な機能も採り入れられています。
.PP
\fBbash\fP は IEEE POSIX specification (IEEE Standard 1003.1) の Shell and
Utilities に準拠する実装を目指しています。 \fBbash\fP はデフォルトで POSIX 準拠に設定することもできます。
.SH オプション
組み込みコマンド \fBset\fP の説明で述べられている 1 文字のシェルオプションを、 起動時に指定できます。 それに加えて、\fBbash\fP
は以下のオプションを起動時に解釈します。
.PP
.PD 0
.TP 10
\fB\-c\fP\fI\| string\^\fP
\fB\-c\fP オプションが指定されると、コマンドが \fIstring\fP から読み込まれます。 \fIstring\fP の後に引き数があれば、これらは
位置パラメータ (positional parameter: \fB$0\fP から始まるパラメータ) に代入されます。
.TP
\fB\-i\fP
オプションが指定されると、 \fBbash\fP は \fI対話的\fP(interactive) に動作します。
.TP
\fB\-l\fP
ログインシェル (後述の
.SM
\fB起動\fP セクションを参照) として起動されたかのように \fBbash\fP を動作させます。
.TP
\fB\-r\fP
\fB\-r\fP オプションが指定されると、 \fBbash\fP は \fI制限された状態 (restricted)\fP となります (後述の
.SM
\fB制限付きのシェル\fP を参照)。
.TP
\fB\-s\fP
\fB\-s\fP オプションが指定された場合と、 オプションを全て処理した後に引き数が残っていなかった場合には、 コマンドは標準入力から読み込まれます。
このオプションを使うと、 対話的シェルを起動するときに 位置パラメータを設定できます。
.TP
\fB\-D\fP
二重引用符によるクォート文字列 (double\-quoted strings) に \fB$\fP が前置されたものを、全てリストして標準出力に出力します。
これらは、カレントロケールが \fBC\fP または \fBPOSIX\fP 以外のときに、 翻訳の対象となるべき文字列です。 このオプションを指定すると、
自動的に \fB\-n\fP オプションも指定されたことになります。 つまりコマンドは全く実行されません。
.TP
\fB[\-+]O [\fP\fIshopt_option\fP\fB]\fP
\fIshopt_option\fP には、組み込みコマンド \fBshopt\fP (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照)
に与えるのと同じシェルのオプションを指定します。 \fIshopt_option\fP が有効なオプションであれば、 \fB\-O\fP でオプションが設定されます。
\fB+O\fP で設定解除になります。 \fIshopt_option\fP を指定しない場合、 \fBshopt\fP
で指定できるオプションの名前と値が標準出力に表示されます。 このとき、\fB+O\fP では、入力として再利用できる形で出力されます。
.TP
\fB\-\-\fP
\fB\-\-\fP はオプションの終わりを示し、それ以降のオプション処理を行いません。 \fB\-\-\fP 以降の引き数は全て、ファイル名や引き数として扱われます。
引き数 \fB\-\fP は \fB\-\-\fP と同じです。
.PD
.PP
\fBbash\fP が解釈するオプションには複数の文字からなるものもたくさんあります。 このようなオプションを認識させるためには、 コマンドライン中で 1
文字のオプションよりも前に置かなければなりません。
.PP
.PD 0
.TP
\fB\-\-debugger\fP
シェルの実行を開始する前に、デバッグモードを準備します。 拡張デバッグモードを有効にします (後述の組み込みコマンド \fBshopt\fP の
\fBextdebug\fP オプションを参照)。
.TP
\fB\-\-dump\-po\-strings\fP
\fB\-D\fP と同じですが、 出力は GNU \fIgettext\fP の \fBpo\fP (ポータブルオブジェクト) ファイル形式で行われます。
.TP
\fB\-\-dump\-strings\fP
\fB\-D\fP と同じです。
.TP
\fB\-\-help\fP
使用方法についてのメッセージを標準出力に表示し、正常終了します。
.TP
\fB\-\-init\-file\fP \fIfile\fP
.PD 0
.TP
\fB\-\-rcfile\fP \fIfile\fP
.PD
対話的シェルとして起動された場合、 個人用の標準の初期化ファイル \fI~/.bashrc\fP の代わりに \fIfile\fP からコマンドを実行します
(後述の
.SM
\fB起動\fP セクションを参照)。
.TP
\fB\-\-login\fP
\fB\-l\fP と同じです。
.TP
\fB\-\-noediting\fP
シェルが対話的動作の場合、コマンドラインを読み込むときに GNU \fBreadline\fP ライブラリを使用しません。
.TP
\fB\-\-noprofile\fP
システム全体用の起動ファイル
.FN /etc/profile
および個人用の初期化ファイル \fI~/.bash_profile\fP,
\fI~/.bash_login\fP, \fI~/.profile\fP のいずれも読み込みません。デフォルトでは、 \fBbash\fP
はログインシェルとして起動されたときに これらのファイルを読み込みます (後述の
.SM
\fB起動\fP セクションを参照)。
.TP
\fB\-\-norc\fP
シェルが対話的動作を行う場合に、個人用初期化ファイル \fI~/.bashrc\fP の読み込み・実行を行いません。シェルが \fBsh\fP
として起動された場合には、このオプションはデフォルトで有効になります。
.TP
\fB\-\-posix\fP
\fBbash\fP の動作のうち、デフォルトの振舞いが POSIX 標準と異なる部分を、POSIX 標準に準拠するように変更します (\fIposix
モード\fP)。
.TP
\fB\-\-restricted\fP
シェルを制限された状態にします (後述の
.SM
\fB制限付きのシェル\fP セクションを参照)。
.TP
\fB\-\-verbose\fP
\fB\-v\fP と同じです。
.TP
\fB\-\-version\fP
実行された \fBbash\fP のバージョン情報を標準出力に表示し、正常終了します。
.PD
.SH 引き数
オプション処理の後に引き数が残っており、かつ \fB\-c\fP オプションと \fB\-s\fP オプションのいずれも指定されていない場合、
最初の引き数はファイル名とみなされ、 そのファイルにシェルコマンドが記述されているとみなされます。 このような形で \fBbash\fP が起動された場合、
\fB$0\fP にそのファイルの名前が設定されます (残りの引き数は位置パラメータに設定されます)。 \fBbash\fP
はこのファイルからコマンドの読み込みと実行を行い、そして終了します。 \fBbash\fP の終了ステータスは、
このスクリプト中で実行された最後のコマンドの終了ステータスになります。 コマンドが全く実行されなければ、終了ステータスは 0 です。
ファイルは最初にカレントディレクトリから探し、見つけられなかった場合には、
.SM
\fBPATH\fP の中のディレクトリからスクリプトを探します。
.SH 起動
\fIログインシェル(login shell)\fPとは、0 番目の引き数の最初の文字が \fB\-\fP であるシェル、または \fB\-\-login\fP
オプション付きで起動されたシェルのことです。
.PP
\fI対話的な\fPシェルとは、 オプションでない引き数がなく、 標準入力と標準エラー出力がいずれも端末に接続されていて (これは \fIisatty\fP(3)
で調べられます)、 \fB\-c\fP オプションが指定されていない状態で起動されたシェル、または \fB\-i\fP オプション付きで起動されたシェルのことです。
\fBbash\fP が対話的に動作している場合には、
.SM
\fBPS1\fP が設定され、 \fB$\-\fP に \fBi\fP が含まれます。
これを利用すると、対話的動作の状態であるかどうかを、 シェルスクリプトや起動ファイルの内部で調べられます。
.PP
以下の段落では、 \fBbash\fP がどのように起動ファイルを実行するかを説明します。 以下のファイルのいずれかが、
「存在しているが読み込みできない」場合は、 \fBbash\fP はエラーを報告します。ファイル名に含まれるチルダは、 後述の
.SM
\fB展開\fP
セクションにおける \fBチルダ展開\fP の項目で述べるように展開されます。
.PP
\fBbash\fP が対話的なログインシェルとして起動されるか、 \fB\-\-login\fP オプション付きの非対話的シェルとして起動されると、
\fI/etc/profile\fP ファイルが存在すれば、 \fBbash\fP はまずここからコマンドを読み込んで実行します。 このファイルを読んだ後、
\fBbash\fP は \fI~/.bash_profile\fP, \fI~/.bash_login\fP, \fI~/.profile\fP をこの 順番で探します。
\fBbash\fP は、この中で最初に見つかり、かつ読み込みが可能であるファイルから コマンドを読み込んで実行します。 \fB\-\-noprofile\fP
オプションを使ってシェルを起動すれば、 この動作を行わないようにできます。
.PP
ログインシェルが終了するときには、 \fI~/.bash_logout\fP ファイルがあれば、 \fBbash\fP はこれを読み込んで実行します。
.PP
ログインシェルでない対話的シェルとして起動されると、 \fI~/.bashrc\fP ファイルがあれば、 \fBbash\fP
はここからコマンドを読み込み、実行します。 この動作は \fB\-\-norc\fP オプションで行わないようにできます。 \fB\-\-rcfile\fP \fIfile\fP
オプションを使うと、 コマンドの読み込みと実行を \fI~/.bashrc\fP からでなく \fIfile\fP から行わせることができます。
.PP
(例えばシェルスクリプトを実行するために) 非対話的に起動されると、 \fBbash\fP は環境変数
.SM
\fBBASH_ENV\fP
を調べ、この変数が定義されていればその値を展開し、 得られた値をファイル名とみなして、 そこからコマンドの読み込みと実行を行います。 つまり
\fBbash\fP は以下のコマンドが実行されたのと同じように動作します:
.sp .5
.RS
.if t \f(CWif [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi\fP
.if n if [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
.RE
.sp .5
ただし、ファイル名を探すために
.SM
\fBPATH\fP 環境変数の値が使われることはありません。
.PP
\fBsh\fP という名前で \fBbash\fP を起動すると、 \fBbash\fP は古くからある \fBsh\fP の起動動作をできるだけ真似しようとします。 また
POSIX 標準にもできるだけ従おうとします。 対話的なログインシェルとして起動されると、 あるいは \fB\-\-login\fP
オプション付きの非対話的シェルとして起動されると、 このシェルはまず \fI/etc/profile\fP と \fI~/.profile\fP
の順でコマンドの読み込みと実行をしようとします。 \fB\-\-noprofile\fP オプションを使うと、この動作を行わないようにできます。 \fBsh\fP
という名前の対話的シェルとして起動されると、 \fBbash\fP は環境変数
.SM
\fBENV\fP を調べ、この変数が定義されていればその値を展開し、
展開で得た値をコマンドの読み込みと実行を行うためのファイル名として使います。 \fBsh\fP という名前で起動されたシェルは、
ほかの起動ファイルからコマンドの読み込みと起動を行うことはないので、 \fB\-\-rcfile\fP オプションは全く効果を持ちません。 \fBsh\fP
という名前の非対話的シェルとして起動されると、 このシェルはほかの起動ファイルを何も読み込みません。 \fBsh\fP として起動された場合、 \fBbash\fP
は起動ファイルの読み込みを行った後に \fIPOSIX\fP モードに入ります。
.PP
\fB\-\-posix\fP コマンドラインオプション等により \fBbash\fP が \fIPOSIX\fP モードで起動されると、 \fBbash\fP
は起動ファイルに関して POSIX 標準に従います。 このモードでは、対話的シェルは
.SM
\fBENV\fP 環境変数を展開し、
展開して得られた名前のファイルからコマンドの読み込みと実行を行います。 ほかの起動ファイルは全く読み込みません。
.PP
\fBbash\fP は、リモートシェルデーモン \fIrshd\fP やセキュアシェルデーモン \fIsshd\fP
によって実行された場合など、標準入力がネットワーク接続に接続された 状態で実行されたかどうかを調べます。 この方法によって実行されていると
\fBbash\fP が判断した場合、 \fI~/.bashrc\fP が存在し、かつ読み込み可能であれば、 \fBbash\fP
はコマンドをこのファイルから読み込んで実行します。 \fBsh\fP として呼び出された場合には、この動作は行いません。 \fB\-\-norc\fP
オプションを使えばこの動作を禁止できますし、 \fB\-\-rcfile\fP オプションを使えばほかのファイルを読ませるようにもできます。 しかし一般的には
\fIrshd\fP は これらのオプションを付けてシェルを起動しませんし、 指定もできないようになっています。
.PP
シェルが実ユーザ (グループ) ID と異なる実効ユーザ (グループ) ID で起動され、 かつ \fB\-p\fP オプションが与えられていない場合は、
起動ファイルは全く読み込まれず、シェル関数は環境から継承されず、
.SM
\fBSHELLOPTS\fP,
.SM
\fBBASHOPTS\fP,
.SM
\fBCDPATH\fP,
.SM
\fBGLOBIGNORE\fP が環境変数に含まれていても無視され、 実効ユーザ ID には実ユーザ ID
が設定されます。 \fB\-p\fP オプションが起動時に与えられた場合、 起動時の動作は同じですが、 実効ユーザ ID は再設定されません。
.SH 定義
.PP
このドキュメントの残りの部分では、 以下の定義を使用します。
.PD 0
.TP
\fBブランク (blank)\fP
空白文字またはタブ文字
.TP
\fB単語 (word)\fP
シェルが 1 単位とみなす文字の並び。 \fBトークン (token)\fP とも言われます。
.TP
\fB名前 (name)\fP
英数字とアンダースコア文字だけから構成され、 かつ最初の文字が英字かアンダースコア文字である \fI単語\fP。 \fB識別子 (identifier)\fP
とも言われます。
.TP
\fBメタ文字 (metacharacter)\fP
クォートされていない場合に、単語区切りとなる文字。 以下の文字のうちのいずれかです:
.br
.RS
.PP
.if t \fB| & ; ( ) < > space tab\fP
.if n \fB| & ; ( ) < > space tab\fP
.RE
.PP
.TP
\fB制御演算子 (control operator)\fP
制御機能を持つ \fIトークン\fP。 以下のシンボルのうちのいずれかです:
.RS
.PP
.if t \fB|| & && ; ;; ( ) | |& <newline>\fP
.if n \fB|| & && ; ;; ( ) | |& <newline>\fP
.RE
.PD
.SH 予約語
\fI予約語 (reserved word)\fP とはシェルにとって特別な意味を持つ単語です。 以下の単語がクォートされておらず、 かつ単純なコマンド
(simple command) の 先頭の単語 (後述の
.SM
\fBシェルの文法\fP を参照) であるか、 \fBcase\fP コマンドや
\fBfor\fP コマンドの 3 番目の単語である場合には、予約語として認識されます:
.if t .RS
.PP
.B
.if n ! case do done elif else esac fi for function if in select then until while { } time [[ ]]
.if t ! case do done elif else esac fi for function if in select then until while { } time [[ ]]
.if t .RE
.SH シェルの文法
.SS "単純なコマンド (Simple Commands)"
.PP
単純なコマンド (\fIsimple command\fP) とは、 変数の代入を並べたもの (これは省略可能です) の後に、
ブランク区切りの単語とリダイレクションを記述し、 最後に制御演算子を置いたものです。 最初の単語は実行するコマンドを指定します。 これは 0
番目の引き数となります。 残りの単語は起動されるコマンドに引き数として渡されます。
.PP
単純なコマンドの返り値はコマンドの終了コードですが、シグナル \fIn\fP を受けてコマンドが終了した場合には 128+\fIn\^\fP となります。
.SS "パイプライン (Pipeline)"
.PP
\fIパイプライン (pipeline)\fPは、制御演算子 \fB|\fP または \fB|&\fP で区切った 1 つ以上のコマンドの並びです。
パイプラインのフォーマットを以下に示します:
.RS
.PP
[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ]
.RE
.PP
\fIcommand\fP の標準出力は \fIcommand2\fP の標準入力にパイプで接続されます。 この接続は、
コマンドで指定したどのリダイレクションよりも先に実行されます (後述の
.SM
\fBリダイレクト\fP を参照)。 \fB|&\fP
を使うと、\fIcommand\fP の標準エラー出力もパイプを通して \fIcommand2\fP の標準入力に接続されます。 これは \fB2>&1 |\fP
の短縮形です。 この標準エラー出力の暗黙のリダイレクションは、 コマンドに指定された全てのリダイレクションの後に実行されます。
.PP
\fBpipefail\fP オプションが有効になっている場合を除き、 パイプラインの返却ステータスは最後のコマンドの終了ステータスになります。
\fBpipefail\fP が有効になっている場合には、 0 以外のステータスを返した最後の (一番右の) コマンドの値が
パイプラインの返却ステータスになり、 全てのコマンドが正常終了した場合にのみ 0 になります。 パイプラインの前に、予約語である \fB!\fP がある場合、
そのパイプラインの終了ステータスは上記の終了ステータスを 論理否定したものになります。
値を返す前に、シェルはパイプライン中の全てのコマンドが終了するのを待ちます。
.PP
パイプラインの前に予約語 \fBtime\fP がある場合、コマンドの実行にかかった 経過時間・ユーザ時間・システム時間がパイプラインの終了時に報告されます。
\fB\-p\fP オプションを指定すると、 出力フォーマットが POSIX 仕様に変わります。 シェルが \fIposix モード\fP のときには、 後に続くのが
`\-' で始まるトークンであれば \fBtime\fP を予約語と認識しません。 変数
.SM
\fBTIMEFORMAT\fP
には、経過時間情報の表示の仕方を指定するフォーマット文字列を 設定できます (後述の \fBシェル変数\fP の項の
.SM
\fBTIMEFORMAT\fP
に関する説明を参照)。
.PP
シェルが \fIposix モード\fP のときには、\fBtime\fP の直後が 改行でもかまいません。 この場合、シェルと子プロセスがそれまでに消費した
ユーザ時間とシステム時間を出力します。 このときにも、経過時間情報のフォーマットを変数
.SM
\fBTIMEFORMAT\fP で指定できます。
.PP
パイプライン中の各コマンドは、それぞれ別のプロセスとして (つまりサブシェル内で) 実行されます。
.SS リスト
.PP
\fIリスト (list)\fP とは、1つ以上のパイプラインを演算子 \fB;\fP, \fB&\fP, \fB&&\fP, \fB||\fP
のいずれかで区切って並べたものです。パイプラインの最後に \fB;\fP, \fB&\fP, \fB<newline>\fP
のいずれかを置くこともできます。
.PP
リスト演算子のうち、 \fB&&\fP と \fB||\fP の優先順位は同じです。これらの次に、 \fB;\fP と \fB&\fP が同じ優先順位で続きます。
.PP
\fIリスト\fP 中では、コマンドの区切りとして、 セミコロンの代わりに一つ以上の改行が使われることもあります。
.PP
コマンドが制御演算子 \fB&\fP で終わっている場合、シェルはコマンドをサブシェル内で \fIバックグラウンド (background)\fP で実行します。
シェルはコマンドが終了するのを待たずに、返却ステータス 0 を返します。 コマンドを \fB;\fP で区切った場合には、これらは順番に実行されます。
シェルはそれぞれのコマンドが終了するのを順番に待ちます。 返却ステータスは、最後に実行したコマンドの終了ステータスになります。
.PP
AND リストと OR リストは、それぞれ制御演算子 \fB&&\fP と \fB||\fP で区切られたパイプラインの並びです。 AND リストと OR
リストは左結合で実行されます。 AND リストは
.RS
.PP
\fIcommand1\fP \fB&&\fP \fIcommand2\fP
.RE
.PP
という形式であり、 \fIcommand1\fP が終了ステータス 0 を返した場合に限り \fIcommand2\fP が実行されます。
.PP
OR リストは
.RS
.PP
\fIcommand1\fP \fB||\fP \fIcommand2\fP
.PP
.RE
.PP
という形式であり、 \fIcommand1\fP が 0 以外の終了ステータスを返した場合に限り \fIcommand2\fP が実行されます。 AND リストと
OR リストの返却ステータスは、 リスト中で最後に実行されたコマンドの終了ステータスです。
.SS "複合コマンド (Compound Commands)"
.PP
\fI複合コマンド (compound command)\fP を以下に示します:
.TP
(\fIlist\fP)
\fIlist\fP はサブシェル内で実行されます (後述の
.SM
\fBコマンド実行環境\fP \fBの項を参照)。\fP
シェルの環境に影響を与えるような変数の代入や組み込みコマンドは、 コマンドの終了後に影響を残しません。 返却ステータスは \fIlist\fP
の終了ステータスです。
.TP
{ \fIlist\fP; }
\fIlist\fP が単に現在のシェル環境で実行されます。 \fIlist\fP の最後は改行文字かセミコロンでなければなりません。これは
\fIグループコマンド(group command)\fP と呼ばれます。返却ステータスは \fIlist\fP の終了ステータスです。 メタ文字である \fB(\fP
や \fB)\fP と違い、 \fB{\fP と \fB}\fP は \fI予約語\fP であり、予約語として認識される場所に現われる必要があることに注意してください。
これらは単語分割の対象とならないため、 \fIリスト\fP との間が空白またはシェルのメタ文字で分かれている必要があります。
.TP
((\fIexpression\fP))
\fIexpression\fP が後述の
.SM
\fB算術式評価\fP で説明される規則に従って評価されます。 式の値が 0 でない場合、返却ステータスは
0 になります。そうでない場合、 返されるステータスは 1 になります。これは \fBlet "\fP\fIexpression\fP\fB"\fP と全く同じものです。
.TP
\fB[[\fP \fIexpression\fP \fB]]\fP
条件式 \fIexpression\fP の評価値に従って 0 または 1 を返します。 式は後述の
.SM
\fB条件式\fP
で説明する、プライマリによって構成されます。 単語分割とパス名展開は \fB[[\fP と \fB]]\fP の間の単語に対しては行われません。
チルダ展開、パラメータと変数の展開、算術式展開、コマンド置換、 プロセス置換、クォート除去は実行されます。 \fB\-f\fP
などの条件演算子がプライマリとして認識されるためには、 クォートされていてはいけません。
.if t .sp 0.5
.if n .sp 1
\fB[[\fP においては、\fB<\fP 演算子と \fB>\fP 演算子は、 現在のロケールにおける辞書順で比較します。
.if t .sp 0.5
.if n .sp 1
\fB==\fP 演算子と \fB!=\fP 演算子が使われたとき、 演算子の右の文字列はパターンと解釈され、
後述の\fBパターンマッチング\fPで説明する規則に従ってマッチングが行われます。 シェルオプション \fBnocasematch\fP が有効であれば、
アルファベットの大文字と小文字を考慮せずにマッチングが行われます。 返り値は、\fB==\fP 演算子では文字列がマッチしたときに、 \fB!=\fP
演算子では文字列がマッチしなかったときに 0 となり、 そうでない場合に 1 となります。 パターン中のどの部分でも、クォートすることで、
ただの文字列としてマッチングさせることができます。
.if t .sp 0.5
.if n .sp 1
そのほか、二項演算子 \fB=~\fP もあります。 優先順位は \fB==\fP や \fB!=\fP と同じです。
これを使うと、右辺の文字列は拡張正規表現とみなされ、 それに従って (\fIregex\fP(3) にあるように) マッチングが行われます。
文字列がパターンにマッチすれば返り値は 0 であり、 マッチしなければ返り値は 1 になります。 正規表現が文法的に誤っていれば、条件式の返り値は 2
になります。 シェルオプション \fBnocasematch\fP が有効であれば、 アルファベットの大文字と小文字を考慮せずにマッチングが行われます。
パターン中のどの部分でも、クォートすることで、 ただの文字列としてマッチングさせることができます。
正規表現中の括弧による部分式にマッチした部分文字列は、配列変数
.SM
\fBBASH_REMATCH\fP に保存されます。
.SM
\fBBASH_REMATCH\fP のインデックス 0 の要素は、文字列のうち正規表現全体にマッチした部分になります。
.SM
\fBBASH_REMATCH\fP のインデックス \fIn\fP の要素は、文字列のうち、 正規表現中の \fIn\fP
番目の括弧による部分式にマッチした部分になります。
.if t .sp 0.5
.if n .sp 1
式は以下の演算子を使って繋げられます。 以下に演算子を優先度の順に示します:
.if t .sp 0.5
.if n .sp 1
.RS
.PD 0
.TP
\fB( \fP\fIexpression\fP\fB )\fP
\fIexpression\fP の値を返します。これを用いて、 演算子の通常の優先度を変更できます。
.TP
\fB! \fP\fIexpression\fP
\fIexpression\fP が偽ならば真になります。
.TP
\fIexpression1\fP \fB&&\fP \fIexpression2\fP
\fIexpression1\fP と \fIexpression2\fP が両方とも真であれば真になります。
.TP
\fIexpression1\fP \fB||\fP \fIexpression2\fP
\fIexpression1\fP と \fIexpression2\fP のどちらかが真であれば真となります。
.PD
.LP
\fIexpression1\fP の値だけで条件式全体の返り値が決定できれば、 \fB&&\fP 演算子と \fB||\fP 演算子は \fIexpression2\fP
を実行しません。
.RE
.TP
\fBfor\fP \fIname\fP [ [ \fBin\fP [ \fIword ...\fP ] ] ; ] \fBdo\fP \fIlist\fP ; \fBdone\fP
\fBin\fP に続く単語のリストが展開され、要素のリストが生成されます。 変数 \fIname\fP には、このリストの各要素が順番にセットされ、そのたびに
\fIlist\fP が実行されます。「\fBin\fP \fIword\fP」が省略された場合、 \fBfor\fP コマンドは、設定されている位置パラメータそれぞれに対して
\fIlist\fP を一度ずつ実行します(後述の
.SM
\fBパラメータ\fP を参照)。
返却ステータスは実行された最後のコマンドの終了ステータスになります。 \fBin\fP に続く要素を展開した結果が空となった場合、
コマンドは全く実行されず、返却ステータス 0 が返されます。
.TP
\fBfor\fP (( \fIexpr1\fP ; \fIexpr2\fP ; \fIexpr3\fP )) ; \fBdo\fP \fIlist\fP ; \fBdone\fP
最初に、算術式 \fIexpr1\fP が、後述の
.SM
\fB算術式評価\fP で説明される規則に従って評価されます。 次に、算術式 \fIexpr2\fP
がゼロになるまで繰り返し評価されます。 算術式 \fIexpr2\fP の評価結果がゼロでなければ、そのたびごとに\fIlist\fPが実行され、 算術式
\fIexpr3\fP が評価されます。 どの算術式も、省略された場合は、 評価結果が 1 であったものとして振舞います。 返却ステータスは \fIlist\fP
中で実行された 最後のコマンドの終了ステータスとなりますが、 算術式のいずれかが不正である場合には偽となります。
.TP
\fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP
\fBin\fP に続く単語のリストが展開され、要素のリストが生成されます。 展開された単語の集合が番号付きで標準エラー出力に出力されます。 「\fBin\fP
\fIword\fP」が省略された場合、 位置パラメータが出力されます (後述の
.SM
\fBパラメータ\fP を参照)。続いて \fBPS3\fP
プロンプトが表示され、標準入力から 1 行の読み込みが行われます。 表示された単語のいずれかに対応する数字がこの行に含まれていれば、 \fIname\fP
の値としてその単語が設定されます。 行が空であれば、単語とプロンプトが再び表示されます。 EOF を読み込むとコマンドが終了します。
これ以外の値の場合には、 \fIname\fP には空文字列が設定されます。読み込んだ行は変数 \fBREPLY\fP に格納されます。 \fBbreak\fP
コマンドが実行されるまで、選択を行うたびに \fIlist\fP が実行されます。 \fBselect\fP の終了ステータスは、 \fIlist\fP
中で最後に実行したコマンドの終了ステータスですが、 コマンドが全く実行されなかった場合には 0 となります。
.TP
\fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] ... ) \fIlist\fP ;; ] ... \fBesac\fP
\fBcase\fP コマンドは最初に \fIword\fP を展開し、それぞれの \fIpattern\fP に対して順にマッチングを試みます。
マッチングの際にはパス名展開 (後述の \fBパス名展開\fP を参照) と同じ規則が用いられます。 \fIword\fP
には、チルダ展開、パラメータと変数の展開、算術式展開、 コマンド置換、プロセス置換、クォート除去が実行されます。 それぞれの \fIpattern\fP
は、チルダ展開、パラメータと変数の展開、 算術式展開、コマンド置換、プロセス置換、クォート除去のうえで比較されます。 シェルオプション
\fBnocasematch\fP が有効であれば、 アルファベットの大文字と小文字を考慮せずにマッチングが行われます。
マッチするものが見つかると、これに対応する \fIlist\fP が実行されます。 \fB;;\fP 演算子を使うと、
最初にマッチしたパターン以降のマッチングは試みられません。 \fB;;\fP の代わりに \fB;&\fP を使うと、 その次のパターンに対応する \fIlist\fP
の実行に続きます。 \fB;;\fP の代わりに \fB;;&\fP を使うと、 次のパターンがあればそのマッチングを試み、 マッチすれば対応する \fIlist\fP
を実行します。 マッチするパターンが無ければ、終了ステータスは 0 になります。 マッチするものがあったら、終了ステータスは \fIlist\fP
中で最後に実行されたコマンドの終了ステータスになります。
.TP
\fBif\fP \fIlist\fP; \fBthen\fP \fIlist;\fP [ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] ... [ \fBelse\fP \fIlist\fP; ] \fBfi\fP
最初に \fBif\fP \fIlist\fP が実行されます。\fIlist\fP の終了ステータスが 0 ならば、\fBthen\fP \fIlist\fP が実行されます。
そうでなければ \fBelif\fP \fIlist\fP がそれぞれ順番に実行され、 \fIlist\fP の終了ステータスが 0 ならば、対応する \fBthen\fP
\fIlist\fP が実行され、コマンドが終了します。そうでなければ、\fBelse\fP \fIlist\fP が (もし存在すれば)
実行されます。終了ステータスは最後に実行されたコマンドの終了ステータスとなります。どの条件も真と評価されず、コマンドが全く実行されなかった場合、終了ステータスは
0 となります。
.TP
\fBwhile\fP \fIlist\-1\fP; \fBdo\fP \fIlist\-2\fP; \fBdone\fP
.PD 0
.TP
\fBuntil\fP \fIlist\-1\fP; \fBdo\fP \fIlist\-2\fP; \fBdone\fP
.PD
\fBwhile\fP コマンドは、\fIlist\-1\fP 中の最後のコマンドが終了ステータス 0 を返す間、繰り返して \fIlist\-2\fP
を実行します。\fBuntil\fP コマンドは \fBwhile\fP コマンドとほぼ同じですが、 評価の条件が逆となる点が異なります。 \fIlist\-2\fP は
\fIlist\-1\fP 中の最後のコマンドが 0 以外の終了ステータスを返す限りずっと実行されます。 \fBwhile\fP コマンドと \fBuntil\fP
コマンドの終了ステータスは、 \fBdo\fP \fIlist\-2\fP で実行された最後のコマンドの終了ステータスになりますが、
コマンドが全く実行されなかった場合には 0 になります。
.SS "コプロセス (Coprocesses)"
.PP
\fIコプロセス (coprocess)\fP とは、予約語 \fBcoproc\fP で始まるシェルのコマンドのことです。 コプロセスは、コマンドが制御演算子
\fB&\fP で終わっているときのように、 サブシェルで非同期に実行されます。 実行したシェルとコプロセスの間には、双方向のパイプが設けられます
.PP
コプロセスのフォーマットを以下に示します:
.RS
.PP
\fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP]
.RE
.PP
これにより \fINAME\fP という名前のコプロセスが作られます。 \fINAME\fP が指定されない場合、デフォルトの名前は \fICOPROC\fP
となります。 \fIcommand\fP が \fI単純なコマンド\fP (前述) のときには、 \fINAME\fP は指定できません。
指定すると、単純なコマンドの最初の単語として扱われます。 コプロセスが実行されると、実行したシェルのコンテキストに \fINAME\fP という名前の配列変数
(後述の \fB配列\fP を参照) が作られます。 \fIcommand\fP の標準出力は、実行しているシェルのファイル・ディスクリプターの一つと
パイプによって接続されます。 このファイル・ディスクリプターは \fINAME\fP[0] に代入されます。 \fIcommand\fP
の標準入力は、実行しているシェルのファイル・ディスクリプターの一つと パイプによって接続されます。 このファイル・ディスクリプターは
\fINAME\fP[1] に代入されます。 このパイプは、コマンドで指定されたほかのリダイレクトより先に設けられます (後述の
.SM
\fBリダイレクト\fP を参照)。 ファイル・ディスクリプターは、標準的な単語展開により、 シェルのコマンドの引き数やリダイレクションに指定できます。
コプロセスの実行で生成されたシェルのプロセス ID は、変数 \fINAME\fP_PID の値になります。 コプロセスの終了を待つには、組み込みコマンド
\fBwait\fP を使います。
.PP
コプロセスの返却ステータスは、\fIcommand\fP の終了ステータスです。
.SS 関数定義
.PP
シェル関数とは、単純なコマンドとして呼び出されて、 新しい位置パラメーターの一式を持つ複合コマンドを実行するもののことです。
シェル関数は以下の形式で宣言します:
.TP
\fIname\fP () \fIcompound\-command\fP [\fIredirection\fP]
.PD 0
.TP
\fBfunction\fP \fIname\fP [()] \fIcompound\-command\fP [\fIredirection\fP]
.PD
これによって \fIname\fP という名前の関数が定義されます。 予約語 \fBfunction\fP は省略可能です。 予約語 \fBfunction\fP
が与えられた場合、括弧は省略可能です。 関数の \fI実体\fP は複合コマンド \fIcompound\-command\fP です (前述の \fB複合コマンド\fP
を参照)。 多くの場合、 { と } に挟まれたコマンドの \fIリスト\fP が用いられますが、 前述の \fB複合コマンド\fP
で挙げたどのコマンドを用いてもかまいません。 単純なコマンドの名前として \fIname\fP を指定するといつでも \fIcompound\-command\fP
が実行されます。 関数の定義で指定されたリダイレクション (後述の
.SM
\fBリダイレクト\fP を参照) は、関数が実行されるときに処理されます。
関数定義の終了ステータスは、文法エラーが起きた場合や、 読み込み専用の関数が同じ名前で定義されていた場合を除き、0 です。
関数を実行したときの終了ステータスは、実体の中で最後に実行されたコマンドの終了ステータスになります (後述の
.SM
\fB関数\fP を参照)。
.SH "コメント (COMMENTS)"
シェルが対話的でない場合、または対話的なシェルにおいて 組み込みコマンドの \fBshopt\fP に対する \fBinteractive_comments\fP
オプションが有効となっている (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照すること) 場合には、 \fB#\fP
で始まる単語があると、その単語とその行の残りの文字が全て無視されます。 対話シェルでは、 \fBinteractive_comments\fP
オプションが有効でなければコメントは使えません。対話シェルでは、 \fBinteractive_comments\fP
オプションはデフォルトで有効になっています。
.SH クォート
\fIクォート (quoting)\fP を使うと、 特定の文字や単語が持つシェルに対する特別な意味をなくせます。
クォートを用いると、特殊文字の特殊な扱いを無効にしたり、 予約語が予約語として識別されることを防いだり、 パラメータの展開を防いだりできます。
.PP
前述の
.SM
\fB定義\fP で挙げた\fIメタ文字 (metacharacters)\fP にはそれぞれ特殊な意味があるので、
その文字自身を表すためにはクォートしなければなりません。
.PP
コマンドの履歴展開の機能 (後述の
.SM
\fB履歴の展開\fP を参照) が使われているときには、\fI履歴展開\fP 文字 (通常は \fB!\fP) の
履歴展開を防ぐためにはクォートしなければなりません。
.PP
クォートの方法には、 \fIエスケープ文字(escape character)\fP, シングルクォート、ダブルクォートの 3 種類があります。
.PP
クォートされていないバックスラッシュ (\fB\e\fP) は \fIエスケープ文字\fP です。エスケープ文字は <newline>
という例外を除き、 後に続く文字 1 つの文字としての値を保持させます。 \fB\e\fP<newline> という組み合わせが現われ、
かつバックスラッシュ自身がクォートされていない場合には、 \fB\e\fP<newline> は行を継続することを表します
(つまり、入力ストリームから改行文字が削除され、実質的に無視されます)。
.PP
シングルクォートで文字を囲むと、 クォート内部のそれぞれの文字は文字としての値を保持します。
シングルクォートの間にシングルクォートを置くことはできません。 これはバックスラッシュを前に付けても同じです。
.PP
ダブルクォートで文字を囲むとクォート内部の全ての文字は文字としての値を 保持しますが、 \fB$\fP, \fB\`\fP, \fB\e\fP は例外となります。
履歴展開が有効なときには、 \fB!\fP がこれに加わります。 \fB$\fP と \fB\`\fP はダブルクォートの内部でも特殊な意味を失いません。
バックスラッシュの場合は、次の文字が \fB$\fP, \fB\`\fP, \^\fB"\fP\^, \fB\e\fP, \fB<newline>\fP
のいずれかである場合に限り特殊な意味を失いません。 前にバックスラッシュを付ければ、 ダブルクォート文字をダブルクォートによるクォートの内部で
クォートできます。 履歴展開は有効であれば実行されますが、ダブルクォート中の \fB!\fP がバックスラッシュでエスケープされている場合を除きます。
\fB!\fP の前のバックスラッシュは削除されません。
.PP
特殊なパラメータである \fB*\fP と \fB@\fP は、ダブルクォート内部でも特殊な意味を失いません (後述の
.SM
\fBパラメータ\fP を参照)。
.PP
\fB$\fP'\fIstring\fP' の形式を持つ単語は特殊な扱いを受けます。 この単語は \fIstring\fP に展開され、 それから ANSI C
標準で仕様が決められている、 バックスラッシュでエスケープされている文字に置き換えられます。 バックスラッシュエスケープシーケンスは、
(もし存在すれば) 以下のようにデコードされます:
.RS
.PD 0
.TP
\fB\ea\fP
警告 (ベル)
.TP
\fB\eb\fP
バックスペース
.TP
\fB\ee\fP
.TP
\fB\eE\fP
エスケープ文字
.TP
\fB\ef\fP
フォームフィード
.TP
\fB\en\fP
改行
.TP
\fB\er\fP
復帰 (carriage return)
.TP
\fB\et\fP
水平タブ
.TP
\fB\ev\fP
垂直タブ
.TP
\fB\e\e\fP
バックスラッシュ
.TP
\fB\e\(aq\fP
シングルクォート
.TP
\fB\e"\fP
ダブルクォート
.TP
\fB\e\fP\fInnn\fP
8 進値が \fInnn\fP である 8 ビット文字 (1 文字につき数字 1〜3 桁)
.TP
\fB\ex\fP\fIHH\fP
16 進値が \fIHH\fP である 8 ビット文字 (16 進で 1〜2 桁)。
.TP
\fB\eu\fP\fIHHHH\fP
16 進値が \fIHHHH\fP であるユニコード (ISO/IEC 10646) 文字 (16 進 1〜4 桁)。
.TP
\fB\eU\fP\fIHHHHHHHH\fP
16 進値が \fIHHHHHHHH\fP であるユニコード (ISO/IEC 10646) 文字 (16 進 1〜8 桁)。
.TP
\fB\ec\fP\fIx\fP
control\-\fIx\fP の文字
.PD
.RE
.LP
展開された結果はシングルクォートされているのと同じ状態で、 ドル記号は存在しなかったかのように扱われます。
.PP
ダブルクォートされた文字列の前にドル記号があると (\fB$\fP"\fIstring\fP")、 文字列は現在のロケールに従って変換されます。 現在のロケールが
\fBC\fP または \fBPOSIX\fP ならば、 ドル記号は無視されます。文字列が変換されたり置換されたりした場合には、
その結果はダブルクォートされているのと同じ状態になります。
.SH パラメータ
\fIパラメータ (parameter)\fP は値を保持するためのものです。パラメータは \fI名前\fP、 数字、後述の \fB特殊なパラメータ\fP
で挙げる特殊文字のいずれかで表現されます。シェルでの用法においては、 \fI変数(variable)\fP とは \fI名前\fP で表現されたパラメータです。
変数は\fI値\fPと 0 個以上の\fI属性\fPを持ちます。 属性は \fBdeclare\fP 組み込みコマンド (後述の
.SM
\fBシェルの組み込みコマンド\fP の \fBdeclare\fP の項を参照) で設定されます。
.PP
パラメータに値が代入されていれば、 そのパラメータは設定 (set) されていると言われます。
空文字列も有効な値です。一度値を設定すると、組み込みコマンドの \fBunset\fP を使わなければ削除 (unset) できません (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照)。
.PP
\fI変数\fP には、以下の構文で代入できます:
.RS
.PP
\fIname\fP=[\fIvalue\fP]
.RE
.PP
\fIvalue\fP が与えられなかった場合、変数には空文字列が代入されます。全ての \fIvalue\fP
に対して、チルダ展開、パラメータと変数の展開、コマンド置換、 算術式展開、クォート除去が行われます (後述の \fB展開\fP を参照)。変数の \fB整数\fP
属性が設定されている場合 (後述の \fBシェルの組み込みコマンド\fP を参照)、$((...)) の展開を使っていなくても \fIvalue\fP
に対しての算術展開が行われます (後述の \fB算術式展開\fP を参照)。 \fB特殊パラメータ\fP で後述する \fB"$@"\fP
という例外を除いて、単語の分割は行われません。 パス名展開も実行されません。 代入文は組み込みコマンドの \fBalias\fP, \fBdeclare\fP,
\fBtypeset\fP, \fBexport\fP, \fBreadonly\fP, \fBlocal\fP の引き数でも使われます。
.PP
代入文でシェル変数や配列のインデックスに値を代入する場面では、 += 演算子を使って変数の直前の値に追加したり加算したりできます。 +=
を\fI整数\fP属性が設定された変数に対して使うと、 \fI値\fPは算術式展開として評価され、 変数の現在の値に加算されます。 += を配列変数への複合代入
(後述の \fB配列\fP を参照) で使うと、 変数の現在の値は (= を使ったときとは違って) 削除されません。
インデックスによる配列の場合は、新しい値が最大のインデックス より一つ大きいインデックスから配列に追加されます。
連想配列の場合は、新しいキーと値の組が追加されます。 文字列の値の変数に対して使うと、\fI値\fPが展開されて、 変数の元の値の後に追加されます。
.SS "位置パラメータ(Positional Parameters)"
.PP
\fI位置パラメータ (positional parameter)\fP は、1 桁以上の数値で表されるパラメータです。ただし 0 は含みません。
位置パラメータは、シェルが起動されたときにシェルの引き数が代入されますが、 組み込みコマンドの \fBset\fP を使って代入し直すこともできます。
代入文を使って位置パラメータへの代入を行うことはできません。 シェル関数が実行されると、 位置パラメータは一時的に置き換えられます (後述の
.SM
\fB関数\fP を参照)。
.PP
2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({}) で囲まなければなりません (後述の
.SM
\fB展開\fP を参照)。
.SS 特殊パラメータ
.PP
シェルはいくつかのパラメータを特別扱いします。 このようなパラメータは参照されるだけであり、 値を代入することは許されません。
.PD 0
.TP
\fB*\fP
(1 から始まる) 全ての位置パラメータに展開されます。 ダブルクォートの内部で展開が行われたときは、 それぞれのパラメータを特別な変数である
.SM
\fBIFS\fP の最初の文字で区切って並べた 1 つの単語に展開されます。つまり、 "\fB$*\fP" は
"\fB$1\fP\fIc\fP\fB$2\fP\fIc\fP\fB...\fP" と同じです。 ここで \fIc\fP は変数
.SM
\fBIFS\fP の値の最初の文字です。
.SM
\fBIFS\fP が設定されていなければ、パラメータは空白で区切られます。
.SM
\fBIFS\fP
が空文字列の場合、パラメータの間には区切り文字は入らず、 全てのパラメータは繋げられます。
.TP
\fB@\fP
(1 から始まる) 全ての位置パラメータに展開されます。 ダブルクォートの内部で展開が行われたときは、 それぞれのパラメータは別々の単語に展開されます。
つまり "\fB$@\fP" は "\fB$1\fP" "\fB$2\fP" ... と同じです。 単語の中でダブルクォートの展開が行われるときには、
最初のパラメータの展開結果に元の単語のダブルクォートより前の部分が 結び付き、最後のパラメータの展開結果に元の単語のダブルクォートより
後の部分が結び付きます。 位置パラメータがない場合には、"\fB$@\fP" や \fB$@\fP を展開しても無かったことになります (つまり取り除かれます)。
.TP
\fB#\fP
位置パラメータの個数を示す 10 進値に展開されます。
.TP
\fB?\fP
最後に実行されたフォアグラウンドのパイプラインの 終了ステータスに展開されます。
.TP
\fB\-\fP
現在のオプションフラグに展開されます。 これは起動のときに指定したり、組み込みコマンド \fBset\fP で設定したり、( \fB\-i\fP オプション等で)
シェル自身が設定したりします。
.TP
\fB$\fP
シェルのプロセス ID に展開されます。 () を使ったサブシェルの内部では、$ はサブシェルではなく、 現在のシェルのプロセス ID に展開されます。
.TP
\fB!\fP
最後に実行されたバックグラウンド (非同期) コマンドの プロセス ID に展開されます。
.TP
\fB0\fP
シェルまたはシェルスクリプトの名前に展開されます。 これはシェルの初期化時に設定されます。 コマンドを記述したファイルを指定して \fBbash\fP
を起動した場合、 \fB$0\fP にはそのファイルの名前が設定されます。 \fB\-c\fP オプションを付けて \fBbash\fP
を起動した場合、実行する文字列の後に引き数があれば、その最初の値が \fB$0\fP に設定されます。引き数がなければ、 \fBbash\fP
を起動するときに使用した名前が引き数 0 として与えられ \fB$0\fP に設定されます。
.TP
\fB_\fP
シェルの起動時には、環境または引き数リストで渡された、 実行するシェルまたはシェルスクリプトの絶対パス名が設定されます。
その後では、直前のコマンドに対する最後の引き数 (展開後のもの) に展開されます。 また、実行する各コマンドの完全なパス名が設定され、
そのコマンドの環境にエクスポートされます。 メールをチェックするときには、 このパラメータは現在チェックしているメールファイル名を保持します。
.PD
.SS シェル変数
.PP
以下の変数はシェルが設定します:
.PP
.PD 0
.TP
\fBBASH\fP
現在実行している \fBbash\fP を起動したときに使われた、完全なファイル名に展開されます。
.TP
\fBBASHOPTS\fP
コロン区切りのリストで、有効になっているシェルのオプションを示します。 リスト中のそれぞれの単語は、組み込みコマンド \fBshopt\fP の \fB\-s\fP
オプション (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照) に対する有効な引き数になっています。
.SM
\fBBASHOPTS\fP
に現われるオプションは、\fBshopt\fP コマンドで \fIon\fP と表示されるものです。 もし \fBbash\fP
を起動したときに、この変数が環境変数に設定されていれば、 起動ファイルを読み込む前に、リストにある全てのシェルオプションが 有効に設定されます。
この変数は読み込み専用です。
.TP
\fBBASHPID\fP
現在の \fBbash\fP のプロセス ID に展開されます。 \fBbash\fP を再初期化しないサブシェルのような、いくつかの環境においては、 \fB$$\fP
と値が異なります。
.TP
\fBBASH_ALIASES\fP
エイリアスの内部的なリストに対応する連想配列変数です。 エイリアスは通常、組み込みコマンド \fBalias\fP で操作します。
この配列に要素を追加すると、エイリアスのリストにも追加されます。 配列から要素を削除すると、エイリアスがリストから削除されます。
.TP
\fBBASH_ARGC\fP
\fBbash\fP の現在の呼び出しスタックについて、フレームごとの引き数の数が並んだ配列変数です。現在のサブルーチン (シェル関数や、\fB.\fP か
\fBsource\fP で実行されたスクリプト) の引き数の数が、スタックの一番上に置かれます。サブルーチンが実行されると、渡されたパラメータの数が
.SM
\fBBASH_ARGC\fP に追加されます。シェルが
.SM
\fBBASH_ARGC\fP
を設定するのは、拡張デバッグモードのときだけです (後述の組み込みコマンド \fBshopt\fP の \fBextdebug\fP オプションを参照)。
.TP
\fBBASH_ARGV\fP
\fBbash\fP
の現在の呼び出しスタックについて、全ての引き数が並んだ配列変数です。一連の呼び出しのうち、最後に呼ばれたサブルーチンの最後の引き数が、スタックの一番上に置かれます。最初に呼ばれたサブルーチンの最初の引き数が、スタックの一番下になります。サブルーチンが実行されると、渡されたパラメータが
.SM
\fBBASH_ARGV\fP に追加されます。シェルが
.SM
\fBBASH_ARGV\fP
を設定するのは、拡張デバッグモードのときだけです (後述の組み込みコマンド \fBshopt\fP の \fBextdebug\fP オプションを参照)。
.TP
\fBBASH_CMDS\fP
\fBbash\fP が内部に持つ、コマンドのハッシュテーブルに対応する 連想配列変数です。 ハッシュテーブルは通常、組み込みコマンド hash
で操作します。 この配列に要素を追加すると、ハッシュテーブルにも追加されます。 配列から要素を削除すると、ハッシュテーブルから削除されます。
.TP
\fBBASH_COMMAND\fP
現在実行しているか実行しようとしているコマンドです。 ただし、トラップによってシェルが実行しているコマンドは別で、
その場合は、トラップの発動時に実行していたコマンドになります。
.TP
\fBBASH_EXECUTION_STRING\fP
起動オプション \fB\-c\fP で指定されたコマンドです。
.TP
\fBBASH_LINENO\fP
ソースファイル中の行番号からなる配列変数で、 それぞれの要素は
.SM
\fBFUNCNAME\fP の各要素が呼び出された位置に対応します。
つまり、\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP はソースファイル (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP)
中で\fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP が呼び出された行番号です。 別のシェル関数から参照されると
\fB${BASH_LINENO[\fP\fI$i\-1\fP\fB]}\fP になります。 現在の行番号は
.SM
\fBLINENO\fP で取得できます。
.TP
\fBBASH_REMATCH\fP
条件コマンド \fB[[\fP 中の二項演算子 \fB=~\fP により設定される配列変数です。 インデックス 0
の要素は、正規表現全体にマッチする部分文字列です。 インデックス \fIn\fP の要素は、\fIn\fP 番目の括弧による部分式に マッチした部分文字列です。
この変数は読み込み専用です。
.TP
\fBBASH_SOURCE\fP
ソースファイル名からなる配列変数で、それぞれの要素は配列変数
.SM
\fBFUNCNAME\fP
の要素のシェル関数がそれぞれ定義されたファイル名に対応します。 シェル関数 \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP はファイル
\fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fP で定義され、 \fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP から呼ばれています。
.TP
\fBBASH_SUBSHELL\fP
サブシェルやサブシェル環境が作成されるたびに 1 ずつ増えます。 初期値は 0 です。
.TP
\fBBASH_VERSINFO\fP
読み込み専用の配列変数で、配列の各要素は現在実行されている \fBbash\fP のバージョン情報を持っています。
配列変数の要素に代入される内容を以下に示します:
.sp .5
.RS
.TP 24
\fBBASH_VERSINFO[\fP0\fB]\fP
メジャーバージョン番号 (\fIリリース\fP)。
.TP
\fBBASH_VERSINFO[\fP1\fB]\fP
マイナーバージョン番号 (\fIバージョン\fP)。
.TP
\fBBASH_VERSINFO[\fP2\fB]\fP
パッチレベル。
.TP
\fBBASH_VERSINFO[\fP3\fB]\fP
ビルドバージョン。
.TP
\fBBASH_VERSINFO[\fP4\fB]\fP
リリースステータス (\fIbeta1\fP など)。
.TP
\fBBASH_VERSINFO[\fP5\fB]\fP
\fBMACHTYPE\fP の値。
.RE
.TP
\fBBASH_VERSION\fP
現在実行している \fBbash\fP のバージョンを示す文字列に展開されます。
.TP
\fBCOMP_CWORD\fP
現在カーソル位置がある単語の 配列変数 \fB${COMP_WORDS}\fP におけるインデックスです。 この変数はプログラム補完機能 (後述の
\fBプログラム補完\fP を参照) から呼ばれたシェル関数においてのみ有効です。
.TP
\fBCOMP_KEY\fP
現在の補完関数を呼び出したキー (またはキーシーケンスの最後のキー) です。
.TP
\fBCOMP_LINE\fP
現在のコマンドラインです。 この変数はプログラム補完機能 (後述の \fBプログラム補完\fP を参照)
から呼ばれたシェル関数や外部コマンドにおいてのみ有効です。
.TP
\fBCOMP_POINT\fP
現在のコマンドの先頭からの相対値として与えられた カーソル位置のインデックスです。 現在のカーソル位置が現在の現在のコマンドの最後にある場合、
この変数の値は \fB${#COMP_LINE}\fP と等しくなります。 この変数はプログラム補完機能 (後述の \fBプログラム補完\fP を参照)
から呼ばれたシェル関数や外部コマンドにおいてのみ有効です。
.TP
\fBCOMP_TYPE\fP
補完関数を呼び出した補完のタイプに対応する整数値が設定されます。 \fITAB\fP は通常の補完です。 \fI?\fP
は連続したタブ入力による候補のリスト表示です。 \fI!\fP は途中まで補完した後の候補のリスト表示です。 \fI@\fP
は、部分的な補完ができないときの候補のリスト表示です。 \fI%\fP はメニュー補完 (menu completion)です。 この変数はプログラム補完機能
(後述の \fBプログラム補完\fP を参照) から呼ばれたシェル関数と外部コマンドにおいてのみ有効です。
.TP
\fBCOMP_WORDBREAKS\fP
単語補完のときに \fBreadline\fP ライブラリが単語分割の区切り文字として 扱う文字の並びです。
.SM
\fBCOMP_WORDBREAKS\fP を unset すると、この変数の特殊な性質はなくなります。後で再び set しても元には戻りません。
.TP
\fBCOMP_WORDS\fP
現在のコマンドラインの各単語からなる配列変数 (後述の \fB配列\fP 参照) です。 コマンドラインは \fBreadline\fP と同じように前述した
.SM
\fBCOMP_WORDBREAKS\fP によって単語に分割されます。 この変数はプログラム補完機能 (後述の \fBプログラム補完\fP を参照)
から呼ばれたシェル関数においてのみ有効です。
.TP
\fBCOPROC\fP
無名のコプロセス (前述の \fBコプロセス\fP を参照) が入出力するファイル・ディスクリプターを保持する配列変数 (後述の \fB配列\fP 参照) です。
.TP
\fBDIRSTACK\fP
現在のディレクトリスタックの内容を持つ配列変数 (後述の \fB配列\fP を参照) です。組み込みコマンド \fBdirs\fP
を使うと、スタック中のディレクトリがスタック順に表示されます。 配列変数の要素に代入を行うと、 既にスタックに入っているディレクトリを変更できますが、
ディレクトリの追加と削除を行うためには、組み込みコマンドの \fBpushd\fP と \fBpopd\fP を使わなければなりません。
この変数に代入を行っても現在の作業ディレクトリは変わりません。
.SM
\fBDIRSTACK\fP を \fBunset\fP
すると、この変数の特殊な性質はなくなります。後で再び \fBset\fP しても元には戻りません。
.TP
\fBEUID\fP
現在のユーザの実効ユーザ ID に展開されます。 初期化はシェルの起動時に行われます。 この変数は読み込み専用です。
.TP
\fBFUNCNAME\fP
現在の呼び出しスタックにある全てのシェル関数名が 入った配列変数です。 インデックス 0 の要素は、実行中のシェル関数の名前です。 最も下の要素
(最大のインデックスの要素) は
.if t \f(CW"main"\fP.
.if n "main".
です。 この変数は、シェル関数を実行している間のみ存在します。
.SM
\fBFUNCNAME\fP への代入は効果がなく、エラーステータスを返します。
.SM
\fBFUNCNAME\fP を \fBunset\fP すると、この変数の特殊な性質はなくなります。後で再び \fBset\fP しても元には戻りません。
.if t .sp 0.5
.if n .sp 1
この変数の各要素は、\fBBASH_LINENO\fP や \fBBASH_SOURCE\fP の各要素に 対応します。
これらを参照することで、呼び出しスタックの状態を確認できます。 例えば、\fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP はファイル
\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP の行番号 \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP から呼び出されたものです。
組み込みコマンド \fBcaller\fP を実行すると、これらの情報から 現在の呼び出しスタックを表示します。
.TP
\fBGROUPS\fP
現在のユーザがメンバになっているグループのリストを含んだ配列変数です。
.SM
\fBGROUPS\fP
への代入は効果がなく、エラーステータスを返します。
.SM
\fBGROUPS\fP が unset された場合はこの変数の特殊な性質はなくなります。
その後に再設定されたとしても元に戻りません。
.TP
\fBHISTCMD\fP
現在のコマンドの履歴番号 (履歴リストにおけるインデックス) です。
.SM
\fBHISTCMD\fP を \fBunset\fP
すると、この変数の特殊な性質はなくなります。後で再び \fBset\fP しても元には戻りません。
.TP
\fBHOSTNAME\fP
現在のホスト名が自動的に設定されます。
.TP
\fBHOSTTYPE\fP
\fBbash\fP を実行するマシンの種類をユニークに記述する文字列が自動的に設定されます。 デフォルト値はシステム依存です。
.TP
\fBLINENO\fP
この変数が参照されると、その場所ごとに、 スクリプトや関数における現在の行番号 (1 から始まります) を表す 10
進値に置き換わります。スクリプトや関数の内部でない場合には、 意味のある値が代入されることは保証されません。
.SM
\fBLINENO\fP を
\fBunset\fP すると、この変数の特殊な性質はなくなります。後で再び \fBset\fP しても元には戻りません。
.TP
\fBMACHTYPE\fP
\fBbash\fP を実行するシステムの種類を完全に指定する文字列が、 GNU 標準の \fIcpu\-company\-system\fP の形式で設定されます。
デフォルト値はシステム依存です。
.TP
\fBMAPFILE\fP
組み込みコマンド \fBmapfile\fP に変数名が指定されなかったときに 読み込んだテキストを保持する配列変数 (後述の \fB配列\fP を参照) です。
.TP
\fBOLDPWD\fP
\fBcd\fP コマンドで設定された、1 つ前の作業ディレクトリ。
.TP
\fBOPTARG\fP
組み込みコマンド \fBgetopts\fP で処理した最後のオプション引き数の値です (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照)。
.TP
\fBOPTIND\fP
組み込みコマンド \fBgetopts\fP で次に処理されるオプション引き数のインデックスです (後述の
.SM
\fBシェルの組み込みコマンド\fP
を参照)。
.TP
\fBOSTYPE\fP
\fBbash\fP を実行するオペレーティングシステムを記述する文字列が自動的に設定されます。 デフォルト値はシステム依存です。
.TP
\fBPIPESTATUS\fP
フォアグラウンドで最後に実行したパイプラインの各プロセスの 終了ステータスのリストを含む配列変数です (後述の \fB配列\fP を参照)。 パイプラインには
1 つのコマンドしかなくてもかまいません。
.TP
\fBPPID\fP
そのシェルの親のプロセス ID。この変数は読み込み専用です。
.TP
\fBPWD\fP
\fBcd\fP コマンドで設定された現在の作業ディレクトリ。
.TP
\fBRANDOM\fP
このパラメータが参照されるたびに、 0 から 32767 までのランダムな整数が生成されます。
.SM
\fBRANDOM\fP
に値を代入すると、乱数の列を初期化できます。
.SM
\fBRANDOM\fP を \fBunset\fP
すると、この変数の特殊な性質はなくなります。後で再び \fBset\fP しても元には戻りません。
.TP
\fBREADLINE_LINE\fP
\fBreadline\fP の編集バッファの内容です。
.if t \f(CWbind -x\fP
.if n "bind -x"
(後述の
.SM
\fBシェルの組み込みコマンド\fP を参照) で使います。
.TP
\fBREADLINE_POINT\fP
\fBreadline\fP の編集バッファでの挿入ポイントの位置です。
.if t \f(CWbind -x\fP
.if n "bind -x"
(後述の
.SM
\fBシェルの組み込みコマンド\fP を参照) で使います。
.TP
\fBREPLY\fP
組み込みコマンド \fBread\fP に引き数が与えられなかったときに読み込まれた行が設定されます。
.TP
\fBSECONDS\fP
このパラメータを参照すると、シェルが起動されてからの秒数が返されます。
.SM
\fBSECONDS\fP
に値を代入した場合、それ以降の参照において返される値は、 代入された値と代入以降の秒数を足した値になります。
.SM
\fBSECONDS\fP を
\fBunset\fP すると、この変数の特殊な性質はなくなります。後で再び \fBset\fP しても元には戻りません。
.TP
\fBSHELLOPTS\fP
コロン区切りのリストで、有効になっているシェルのオプションを示します。 リスト中のそれぞれの単語は、組み込みコマンド \fBset\fP の \fB\-o\fP
オプション (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照) に対する有効な引き数になっています。
.SM
\fBSHELLOPTS\fP に入っているオプションは、\fBset \-o\fP を実行した場合にも \fIon\fP であると報告されます。 この変数が
\fBbash\fP の起動時に環境変数に入っていた場合、 どの初期化ファイルを読むよりも前にリスト中のシェルオプションが有効になります。
この変数は読み込み専用です。
.TP
\fBSHLVL\fP
\fBbash\fP が起動するときに、環境変数で渡された値から 1 増やした値が 設定されます。
.TP
\fBUID\fP
現在のユーザのユーザ ID に展開されます。 初期化はシェルの起動時に行われます。 この変数は読み込み専用です。
.PD
.PP
以下の変数はシェルが使用します。場合によっては、 \fBbash\fP がデフォルト値を変数に代入します。 そのような場合についてはそれぞれ注記します。
.PP
.PD 0
.TP
\fBBASH_ENV\fP
\fBbash\fP がシェルスクリプトを実行するときにこの値が設定されている場合、 この値は (\fI~/.bashrc\fP のように)
シェルを初期化するコマンドが書かれているファイル名と解釈されます。
.SM
\fBBASH_ENV\fP
の値をファイル名として処理する前には、パラメータ展開、コマンド置換、 算術的展開が行われます。 この結果のファイルを検索する際には
.SM
\fBPATH\fP は使用されません。
.TP
\fBBASH_XTRACEFD\fP
有効なファイル・ディスクリプターに対応する整数をセットすると、 \fBbash\fP は
.if t \f(CWset -x\fP
.if n \fIset -x\fP
が設定されたときに、生成されたトレース出力を そのファイル・ディスクリプターに出力します。
.SM
\fBBASH_XTRACEFD\fP が
unset されるか、新しい値が代入されると、 それまで設定されていたファイル・ディスクリプターはクローズされます。
.SM
\fBBASH_XTRACEFD\fP を unset するか空文字列を代入すると、 トレース出力は標準エラー出力に送られます。
.SM
\fBBASH_XTRACEFD\fP に 2 (標準エラー出力のファイル・ディスクリプター) を設定してしまうと、 unset
したときに標準エラー出力がクローズされてしまうことに 注意してください。
.TP
\fBCDPATH\fP
\fBcd\fP コマンドの検索パスです。これは、 \fBcd\fP コマンドで指定した対象ディレクトリを探すディレクトリを コロンで区切って並べたリストです。
例えば、
.if t \f(CW".:~:/usr"\fP といった値になります。
.if n ".:~:/usr" といった値になります。
.TP
\fBCOLUMNS\fP
組み込みコマンド \fBselect\fP によって、選択されたリストを表示する際の端末幅の決定に用いられます。 SIGWINCH
を受信すると自動的に設定されます。
.TP
\fBCOMPREPLY\fP
\fBbash\fP が可能な補完候補を読み込む配列変数です。 この値はプログラム補完機能 (後述の \fBプログラム補完\fP を参照)
によって呼び出されたシェル関数によって生成されます。
.TP
\fBEMACS\fP
\fBbash\fP が起動したときにこの環境変数が設定されて値が
.if t \f(CWt\fP,
.if n "t",
になっていると、Emacs のシェルバッファで動作しているとみなし、 行編集を無効にします。
.TP
\fBENV\fP
.SM
\fBBASH_ENV\fP と類似の変数で、POSIX モードで使われます。
.TP
\fBFCEDIT\fP
組み込みコマンド \fBfc\fP が使うデフォルトのエディタです。
.TP
\fBFIGNORE\fP
ファイル名補完 (後述の
.SM
\fBREADLINE\fP を参照) を行う際に無視するサフィックスを コロンで区切って並べたリストです。
.SM
\fBFIGNORE\fP のエントリのいずれかにサフィックスがマッチするファイル名は、
ファイル名補完にマッチするファイルのリストから除外されます。 例えば値として
.if t \f(CW".o:~"\fP を設定します。
.if n ".o:~" を設定します。
.TP
\fBFUNCNEST\fP
0 より大きい数値を設定すると、関数呼び出しを何重まで許すかの 最大レベルを決めます。 このレベルを超えて関数を呼び出すと、コマンドが異常終了します。
.TP
\fBGLOBIGNORE\fP
パス名展開で無視するファイル名の集合を定義するパターンを コロンで区切って並べたリストです。 パス名展開パターンにマッチするファイル名が
.SM
\fBGLOBIGNORE\fP 内のパターンのどれかにもマッチする場合、 マッチしたもののリストから削除されます。
.TP
\fBHISTCONTROL\fP
履歴リストに入れるコマンドを制御する値をコロンで区切って並べたリストです。 \fIignorespace\fP の値が設定されていると、 \fB空白\fP
文字で始まる行は履歴リストに入りません。 \fIignoredups\fP の値が設定されていると、 履歴の最後の行にマッチする行は履歴リストに入りません。
\fIignoreboth\fP を指定すると \fIignorespace\fP と \fIignoredups\fP の両方が指定されます。 \fIerasedups\fP
の値が設定されていると、行が保存される前に、 現在の行に一致する過去の行が履歴リストから削除されます。 上記以外の値を設定しても無視されます。
.SM
\fBHISTCONTROL\fP が設定されていない場合や、不正な値が設定されている場合には、 シェルのパーザが読み込んだ全ての行は
\fBHISTIGNORE\fP の値が示す条件の下で履歴リストに保存されます。 複数行にまたがる複合コマンドの場合は 2
番目以降の行が調べられることはありません。よって、これらは \fBHISTCONTROL\fP の値に関わらず履歴に追加されます。
.TP
\fBHISTFILE\fP
コマンド履歴が保存されるファイルの名前 (後述の
.SM
\fB履歴\fP を参照)。デフォルト値は \fI~/.bash_history\fP です。
設定されていない場合、 対話シェルが終了するときに履歴の保存が行われません。
.TP
\fBHISTFILESIZE\fP
履歴ファイルに保持する履歴の最大数です。この変数に値が代入された場合、 その行数を越えないように、必要に応じて古いエントリを削除して履歴ファイルを
切り詰めます。 デフォルト値は 500 です。対話シェルが終了するときにも、 履歴ファイルのサイズはファイル書き込みの後にこのサイズに切り詰められます。
.TP
\fBHISTIGNORE\fP
どのコマンド行を履歴リストに保存するかを決めるために使うパターンを コロンで区切って並べたリストです。 それぞれのパターンは行の先頭から比較され、
行全体と完全に一致しなければなりません (`\fB*\fP' が暗黙的に追加されるこ とはありません)。行に対する各パターンの評価は
\fBHISTCONTROL\fP で指定したチェックが行われた後で実行されます。 通常のシェルのパターンマッチング文字以外に、 `\fB&\fP'
が履歴の前の行にマッチします。 バックスラッシュを使って `\fB&\fP' をエスケープできます。 マッチングを試みる前にバックスラッシュは取り除かれます。
複数行にまたがる複合コマンドの場合、2 番目以降の行は調べられません。 よって、これらは
.SM
\fBHISTIGNORE\fP
の値に関わらず履歴に追加されます。
.TP
\fBHISTSIZE\fP
コマンド履歴に記憶するコマンドの数 (後述の
.SM
\fBHISTORY\fP を参照)。 デフォルトは 500 です。
.TP
\fBHISTTIMEFORMAT\fP
この変数に空でない値が設定されると、 組み込みコマンド \fBhistory\fP で履歴エントリを表示するときに タイムスタンプを表示するための
\fIstrftime\fP(3) の書式文字列 として使われます。 この変数が設定されると、ほかのシェルのセッションでも使えるように
タイムスタンプは履歴ファイルに書き込まれます。 タイムスタンプはほかの履歴行と区別するために履歴のコメントとなります。
.TP
\fBHOME\fP
現在のユーザのホームディレクトリです。 組み込みコマンド \fBcd\fP のデフォルトの引き数になります。
この変数の値は、チルダ展開を実行するときにも使われます。
.TP
\fBHOSTFILE\fP
.FN /etc/hosts
と同じフォーマットであり、 シェルがホスト名を補完する必要があるときに読み込むファイルの名前を示します。
シェルの実行中でも補完するホスト名のリストを変更できます。 この変数が変更された次の機会にホスト名の補完を試みるとき、 \fBbash\fP
は新しいファイルの内容を既存のデータベースに追加します。
.SM
\fBHOSTFILE\fP が設定されているがその値が空文字列の場合や、
読み込めるファイルの名前ではない場合には、 \fBbash\fP は補完可能なホスト名のリストを取得するために
.FN /etc/hosts
を使用します。
.SM
\fBHOSTFILE\fP が unset された場合は、ホスト名のリストはクリアされます。
.TP
\fBIFS\fP
\fI内部フィールド区切り文字 (Internal Field Separator)\fP です。展開を行った後に単語を分割する場合や、組み込みコマンドの
\fBread\fP を使ったときに行を単語に分割する場合に使われます。 デフォルト値は
\*(lq<空白><タブ><改行>\*(rq です。
.TP
\fBIGNOREEOF\fP
単独で入力された
.SM
\fBEOF\fP 文字を受け取ったときの対話シェルの動作を制御します。
この変数が設定されていれば、指定されている値の数だけの
.SM
\fBEOF\fP 文字を連続して行頭の文字として入力しなければ \fBbash\fP
は終了しません。この変数に数値以外の値が設定されている場合や、 空の値が設定されている場合には、デフォルト値として 10 が使われます。
この変数が存在しなければ、
.SM
\fBEOF\fP 文字はシェルへの入力の終わりを示します。
.TP
\fBINPUTRC\fP
\fBreadline\fP の起動ファイルのファイル名です。これはデフォルト値の
.FN ~/.inputrc
(後述の
.SM
\fBREADLINE\fP を参照) を上書きします。
.TP
\fBLANG\fP
ロケールカテゴリが \fBLC_\fP で始まる変数によって明示的に指定されて いない場合、そうしたカテゴリのロケールを決定するのに使用されます。
.TP
\fBLC_ALL\fP
この変数はロケールカテゴリを指定する \fBLC_\fP 変数と \fBLANG\fP の値に優先します。
.TP
\fBLC_COLLATE\fP
この変数はパス名展開の結果をソートするときに使用される照合順序と、 パス名展開とパターンマッチングにおける
範囲表現、等値クラス、照合順序の動作を決定します。
.TP
\fBLC_CTYPE\fP
この変数は、パス名展開とパターンマッチングにおける 文字の解釈と文字クラスに含まれる文字を決めます。
.TP
\fBLC_MESSAGES\fP
この変数は、\fB$\fP の後に続くダブルクォートされた文字列の 翻訳に使うロケールを決めます。
.TP
\fBLC_NUMERIC\fP
この変数は数字のフォーマットに使用するロケールカテゴリを決定します。
.TP
\fBLINES\fP
組み込みコマンド \fBselect\fP によって、選択されたリストを表示する際の行数の決定に用いられます。
.SM
\fBSIGWINCH\fP
を受信すると自動的に設定されます。
.TP
\fBMAIL\fP
このパラメータにファイル名またはディレクトリ名が設定されており、かつ変数
.SM
\fBMAILPATH\fP が設定されていなければ、 \fBbash\fP
は指定されたファイルまたはMaildier形式のディレクトリへの メールの到着をユーザに通知します。
.TP
\fBMAILCHECK\fP
\fBbash\fP がメールをチェックする頻度を (秒数で) 指定します。 デフォルト値は 60 秒です。 メールをチェックする時間になると、
シェルはプライマリのプロンプトを表示する前にチェックを行います。 この変数が unset された場合、 あるいはこの変数に 0
以上の数値以外が代入された場合は、 シェルはメールのチェックを行いません。
.TP
\fBMAILPATH\fP
メールのチェックに使うファイル名をコロンで区切って並べたリストです。 特定のファイルにメールが到着したときに出力される メッセージは、`?'
を使ってファイル名をメッセージから区切ることによって 指定できます。メッセージのテキスト中で使われたときは、 \fB$_\fP
は現在のメールファイルの名前に展開されます。 設定例:
.RS
.PP
\fBMAILPATH\fP=\(aq/var/mail/bfox?"You have mail":~/shell\-mail?"$_ has
mail!"\(aq
.PP
この変数のデフォルト値は \fBbash\fP が与えますが、 \fBbash\fP が使うユーザのメールファイルの位置はシステム依存です
(/var/mail/\fB$USER\fP 等)。
.RE
.TP
\fBOPTERR\fP
値として 1 が設定されている場合、 \fBbash\fP は組み込みコマンド \fBgetopts\fP (後述の
.SM
\fBシェルの組み込みコマンド\fP
を参照) を使って生成したエラーメッセージを表示します。
.SM
シェルが起動されたり、シェルスクリプトが実行されたりするたびに、
.SM
\fBOPTERR\fP は 1 に初期化されます。
.TP
\fBPATH\fP
コマンドの検索パスです。 シェルがコマンドを検索するディレクトリをコロンで区切って並べたリストです (後述の
.SM
\fBコマンドの実行\fP
を参照)。
.SM
\fBPATH\fP 中の長さ 0 の (空の) ディレクトリ名は、カレントディレクトリを示します。 空のディレクトリ名は、2
つのコロンを並べるか、 先頭や末尾のコロンで表します。 デフォルトのパスはシステム依存で、 \fBbash\fP
をインストールしたシステム管理者が設定します。 一般的な値は
.if t \f(CW/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin\fP です。
.if n ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin'' です。
.TP
\fBPOSIXLY_CORRECT\fP
\fBbash\fP が起動したときにこの環境変数が設定されていると、 起動オプション \fB\-\-posix\fP
を指定したときと同じように、どの初期化ファイルを読むよりも前に シェルが \fIposix モード\fP になります。
シェルの実行中にこの変数が設定されると、 \fBbash\fP は
.if t \f(CWset -o posix\fP
.if n \fIset -o posix\fP
コマンドを実行したときと同じように、\fIposix モード\fP が有効になります。
.TP
\fBPROMPT_COMMAND\fP
設定されていると、プライマリプロンプトを出す前に毎回、 この値がコマンドとして実行されます。
.TP
\fBPROMPT_DIRTRIM\fP
0 より大きい値が設定されると、 プロンプト文字列のエスケープシーケンス \fB\ew\fP や \fB\eW\fP (後述の
.SM
\fBプロンプト\fP
を参照) を展開するときに、ディレクトリがパス名の最後からこの数だけ残ります。 削られた部分は省略記号に置き換えられます。
.TP
\fBPS1\fP
このパラメータの値は展開されてプライマリのプロンプト文字列として使われます。 (後述の
.SM
\fBプロンプト\fP を参照)、 デフォルト値は
\*(lq\fB\es\-\ev\e$ \fP\*(rq です。
.TP
\fBPS2\fP
このパラメータの値は \fBPS1\fP と同じように展開され、セカンダリのプロンプト文字列として使われます。 デフォルト値は \*(lq\fB> \fP\*(rq
です。
.TP
\fBPS3\fP
このパラメータの値は \fBselect\fP コマンド (前述の
.SM
\fBシェルの文法\fP を参照) のプロンプトとして使われます。
.TP
\fBPS4\fP
このパラメータは \fBPS1\fP と同じように展開されます。この値は実行トレース中に \fBbash\fP が表示する各コマンド前に出力されます。
複数段の間接レベル (levels of indirection) を示すときは、
.SM
\fBPS4\fP
の最初の文字が必要に応じて複数回表示されます。 デフォルト値は \*(lq\fB+ \fP\*(rq です。
.TP
\fBSHELL\fP
この環境変数にシェルのフルパス名が保存されています。 シェルを起動したときに設定されていない場合は、 \fBbash\fP
が現在のユーザのログインシェルのフルパス名を代入します。
.TP
\fBTIMEFORMAT\fP
このパラメータの値は、予約語である \fBtime\fP が先頭に付いているパイプラインに対して、
時間情報の表示の仕方を指定するフォーマット文字列として使われます。 \fB%\fP は、時間の値などに展開される エスケープシーケンスを示すための文字です。
エスケープシーケンスとその意味を以下に示します。 ただし、ブレース ([]) は省略可能であることを表しま す。
.sp .5
.RS
.PD 0
.TP 10
\fB%%\fP
\fB%\fP 文字そのもの。
.TP
\fB%[\fP\fIp\fP\fB][l]R\fP
経過した秒数。
.TP
\fB%[\fP\fIp\fP\fB][l]U\fP
ユーザモードで使われた CPU の秒数。
.TP
\fB%[\fP\fIp\fP\fB][l]S\fP
システムモードで使われた CPU の秒数。
.TP
\fB%P\fP
CPU のパーセンテージ。(%U + %S) / %R で算出されます。
.PD
.RE
.IP
\fIp\fP 省略可能で、\fI精度 (precision)\fP が何桁であるかを指定します。 つまり小数点以下の桁数を指定します。この値が 0 ならば、
小数点や小数の部分は出力されません。 また、小数点以下で指定できるのは 3 桁までです。 つまり、\fIp\fP の値が 3 より大きければ 3
に変更されます。 \fIp\fP を指定しなければ、この値は 3 となります。
.IP
\fBl\fP は省略可能ですが、指定すると、分を含み、 \fIMM\fPm\fISS\fP.\fIFF\fP という形式の長いフォーマットになります。 小数を含むかどうかは
\fIp\fP の値によって決まります。
.IP
この変数が設定されていなければ、 \fBbash\fP は
\fB$\(aq\enreal\et%3lR\enuser\et%3lU\ensys\t%3lS\(aq\fP という値が指定されているかのように動作します。
この値が空文字列ならば、時間の情報は表示されません。 フォーマット文字列の表示の際には、末尾に改行文字が追加されます。
.PD 0
.TP
\fBTMOUT\fP
0 より大きい値を設定すると、
.SM
\fBTMOUT\fP の値が組み込みコマンド \fBread\fP のデフォルトのタイムアウト値となります。
\fBselect\fP コマンドは、端末からの入力の際に
.SM
\fBTMOUT\fP 秒入力がないと終了します。
対話シェルではこの値は、プライマリのプロンプトを出してから 入力を待つ秒数として解釈されます この秒数待って入力が来ないと、 \fBbash\fP
は終了します
.TP
\fBTMPDIR\fP
設定すると、値を \fBbash\fP がシェル用にテンポラリファイルを作る ディレクトリ名として使います。
.TP
\fBauto_resume\fP
この変数は、ユーザがジョブ制御をするときの方法を変更します。 この変数を設定した場合、1 語からなるリダイレクトなしの単純なコマンドを
入力すると、停止中のジョブの実行再開候補として扱われます。 曖昧な指定は許されず、入力された文字列で始まるジョブが複数ある場合には、
最後にアクセスされたものが選ばれます。 停止中のジョブの \fI名前\fP とは、コマンドを起動する際に使ったコマンドラインのことです。 この変数の値に
\fIexact\fP が設定されている場合、 与えられた文字列は停止中のジョブの名前に 正確にマッチしなければなりません。 \fIsubstring\fP
が設定されている場合は、 与えられた文字列は停止中のジョブの名前の部分文字列に マッチする必要があります。 \fIsubstring\fP
という値は、ジョブ識別子の \fB%?\fP に似た機能を持っています (後述の
.SM
\fBジョブ制御\fP を参照)。
これ以外の値が設定されている場合、 与えられた文字列は停止中のジョブの名前の 先頭部分でなければなりません。これはジョブ識別子の
\fB%\fP\fIstring\fP と似た機能を持っています。
.TP
\fBhistchars\fP
2 文字または 3 文字で、 履歴の展開とトークン分割 (後述の
.SM
\fB履歴の展開\fP を参照) を制御します。 最初の文字は \fI履歴展開
(history expansion)\fP 文字であり、 履歴展開の先頭を示す文字です。通常、これは `\fB!\fP' です。 2 番目の文字は \fI簡易置換
(quick substitution)\fP 文字であり、直前に入力したコマンドの文字列を 別の文字列に置き換えて再実行するための省略表現として使います。
デフォルト値は `\fB^\fP' です。 3 番目の文字は省略可能です。単語の先頭でこの文字が見つかると、
行の残りの部分がコメントとなるような文字を指定します。 これは通常は `\fB#\fP' です。 履歴コメント文字があると、
その行の残りの単語に対する履歴置換はスキップされます。 この文字があるからといって、
必ずしもシェルのパーザが行の残りの部分をコメントとして扱うわけではありません。
.PD
.SS 配列
\fBbash\fP は 1 次元のインデックスによる配列と連想配列の変数を扱うことができます。 全ての変数は配列として使用できます。 \fBdeclare\fP
組み込みコマンドを使えば、明示的に配列を宣言できます。 配列のサイズの上限はありませんし、 メンバのインデックス付けや代入を
連続的にしなければならないという条件もありません。 インデックスによる配列は整数 (算術式を含む) で参照します。 インデックスは 0 から始まります。
連想配列は任意の文字列で参照します。
.PP
変数の代入の際に \fIname\fP[\fIsubscript\fP]=\fIvalue\fP という記法が使われた場合、配列は自動的に生成されます。
\fIsubscript\fP は算術式として扱われますが、この式は評価すると 数値になるものでなければなりません。 \fIsubscript\fP を評価すると
0 未満の数になる場合、最大のインデックス +1 からのオフセットとして扱われます。つまり、subscript が \-1
のときは、配列の最後の要素を参照します。 インデックスによる配列を明示的に宣言するには、 \fBdeclare \-a \fP\fIname\fP を使います
(後述の
.SM
\fBシェルの組み込みコマンド\fP を参照)。 \fBdeclare \-a \fP\fIname\fP\fB[\fP\fIsubscript\fP\fB]\fP
も許されます。このとき \fIsubscript\fP は無視されます。
.PP
連想配列は \fBdeclare \-A \fP\fIname\fP で作ります。
.PP
組み込みコマンドの \fBdeclare\fP と \fBreadonly\fP を使うと、配列変数に対して属性を設定できます。
どの属性も配列のメンバ全てに対して適用されます。
.PP
配列の代入は \fIname\fP=\fB(\fPvalue\fI1\fP ... value\fIn\fP\fB)\fP という形式の複合代入 (compound
assignment) を用いて行います。 ここでそれぞれの \fIvalue\fP の形式は [\fIsubscript\fP]=\fIstring\fP です。
インデックスによる配列では、ブラケット ([]) と subscript は省略できます。 ブラケットと subscript を省略しなかった場合、
そのインデックスに対して代入が行われます。 省略した場合には、代入される要素のインデックスは、 その文の中で直前に代入されたインデックスに 1
を加えたものになります。 インデックスは 0 から始まります。
.PP
連想配列への代入では、subscript は省略できません。
.PP
この記法は組み込みコマンド \fBdeclare\fP でも使えます。個別の配列要素に対する代入は、先に説明した
\fIname\fP[\fIsubscript\fP]=\fIvalue\fP の記法を使って行います。
.PP
配列の任意の要素は、${\fIname\fP[\fIsubscript\fP]} を使って参照できます。 パス名展開との衝突を避けるためにブレースが必要です。
\fIsubscript\fP が \fB@\fP か \fB*\fP ならば、配列の参照は \fIname\fP の全ての要素に展開されます。この 2 つの添字が異なるのは、
単語がダブルクォートの内部にある場合だけです。 単語がダブルクォートされていれば、${\fIname\fP[*]} は 1 つの単語に展開されます。
この単語は、配列の各メンバの値を特殊変数
.SM
\fBIFS\fP の最初の値で区切って並べたものです。一方、${\fIname\fP[@]} は、
\fIname\fP の各要素を別々の単語に展開します。 配列のメンバが全くないときは、${\fIname\fP[@]} は空の単語に展開されます。
単語の中でダブルクォートの展開が行われるときには、 元の単語のダブルクォートより前の部分の後に 最初のパラメータの展開結果がつながり、
最後のパラメータの展開結果の後に 元の単語のダブルクォートより後の部分がつながります。 これは特殊パラメータ \fB*\fP や \fB@\fP の展開に似ています
(前述の \fB特殊パラメータ\fP を参照)。 ${#\fIname\fP[\fIsubscript\fP]} は ${\fIname\fP[\fIsubscript\fP]}
の長さに展開されます。 \fIsubscript\fP が \fB*\fP または \fB@\fP の場合は、
配列中の要素数に展開されます。添字なしで配列変数を参照すると、 0 番目の要素を参照したことになります。
.PP
配列変数は subscript に対して値が代入されていれば 設定されているとみなされます。 空文字列は有効な値です。
.PP
組み込みコマンドの \fBunset\fP は配列の削除に使われます。\fBunset\fP \fIname\fP[\fIsubscript\fP] とすると、インデックスが
\fIsubscript\fP である配列の要素が削除されます。 パス名展開による意図しない副作用に注意してください。 \fBunset\fP \fIname\fP
(\fIname\fP は配列) または \fBunset\fP \fIname\fP[\fIsubscript\fP] (\fIsubscript\fP が \fB*\fP または
\fB@\fP) とすると、 配列全体が削除されます。
.PP
組み込みコマンドの \fBdeclare\fP, \fBlocal\fP, \fBreadonly\fP いずれにおいても、 \fB\-a\fP
オプションでインデックスによる配列を指定できます。 \fB\-A\fP また、オプションで連想配列を指定できます。 両方が指定されたときには、 \fB\-A\fP
が優先します。 組み込みコマンド \fBread\fP では、 \fB\-a\fP オプションを使えば標準入力から読み込んだ単語のリストを 配列に代入できます。
組み込みコマンド \fBset\fP と \fBdeclare\fP では、別の変数への代入に再利用できるような形で配列の値を表示します。
.SH 展開
展開はコマンドラインが単語へ分割された後に (コマンドライン上で) 行われます。行われる展開は 7 種類あります: \fIブレース展開 (brace
expansion)\fP, \fIチルダ展開 (tilde expansion)\fP, \fIパラメータと変数の展開 (parameter and
variable expansion)\fP, \fIコマンド置換 (command substitution)\fP, \fI算術式展開 (arithmetic
expansion)\fP, \fI単語の分割 (word splitting)\fP, \fIパス名展開 (pathname expansion)\fP。
.PP
展開の順序は次のようになります: ブレース展開、チルダ展開、パラメータ・ 変数・算術式展開、コマンド置換 (左から右へ)、単語分割、パス名展開。
.PP
これらに加えて \fIプロセス置換 (process substitution)\fP をサポートできるシステムもあります。
.PP
展開した部分の単語の数が変化することがあるのは、ブレース展開、 単語の分割、パス名展開だけです。ほかの展開では、 1 つの単語は 1
つの単語に展開されます。 この規則の唯一の例外は先に説明した "\fB$@\fP" と "\fB${\fP\fIname\fP\fB[@]}\fP" の展開 (
.SM
\fBパラメータ\fP を参照) だけです。
.SS ブレース展開
.PP
\fIブレース展開 (brace expansion)\fP を使うと、任意の文字列を生成できます。この仕組みは \fIパス名展開\fPに似ていますが、
生成されたファイル名が実在する必要はありません。 ブレース展開されるパターンは、 \fI前置部分 (preamble: 省略可能)\fP、
対になるブレースで囲んだコンマ区切りの文字列またはシーケンス式、 \fI後置部分 (postscript: 省略可能)\fP を順に並べたものです。
前置部分はブレース内にある文字列それぞれの先頭部分に追加され、 後置部分は左から右に順に展開されて得られた それぞれの文字列の末尾に追加されます。
.PP
ブレース展開は入れ子にできます。 展開して得られた文字列はソートされず、 左から右への順番がそのまま残ります。 例えば a\fB{\fPd,c,b\fB}\fPe
は `ade ace abe' と展開されます。
.PP
シーケンス式は \fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]}\fP の形になります。\fIx\fP と \fIy\fP は整数または 1
つの文字で、 省略可能な \fIincr\fP は増減分の整数です。 整数が与えられると、 \fIx\fP と \fIy\fP
の間の両端を含む数を全て列挙した形に展開されます。 与る整数の前に \fI0\fP を付けると、全ての項が同じ幅に揃えられます。 つまり、\fIx\fP か
\fIy\fP のどちらかが 0 で始まる場合、生成される全ての項が 同じ文字数になるように、必要であれば前に 0 が付けられます。 文字が与えられると
辞書順で \fIx\fP と \fIy\fP の間の両端を含む文字を全て列挙した形に展開されます。 \fIx\fP と \fIy\fP は同じ型である必要があります。 incr
が与えられると、その値が各項の間の差となります。 incr のデフォルトは、1 または \-1 のうち適切な方です。
.PP
ブレース展開はほかのどの展開よりも前に実行されます。 また、ほかの展開において特殊な意味を持つ文字もそのまま結果に残ります。
つまり、厳密にテキスト操作だけを行います。 \fBbash\fP は、展開の文脈やブレースの間のテキストに対して 文法的な解釈を適用することは一切ありません。
.PP
正しい形のブレース展開には、クォートされていない開きブレースと 閉じブレース、そしてシーケンス式か少なくとも 1 つのクォートされていないコンマが
含まれていなければなりません。正しい形でないブレース展開は全て、 変更されないでそのまま残ります。 \fB{\fP や \fB,\fP
をバックスラッシュでクォートすれば、 ブレース展開の一部と解釈されないようにできます。 パラメータ展開との衝突を避けるため、文字列 \fB${\fP
はブレース展開の対象とは解釈されません。
.PP
この仕組みは、 生成される文字列の共通先頭部分が上記の例より長い場合に、 短縮表現としてよく使用されます:
.RS
.PP
mkdir /usr/local/src/bash/{old,new,dist,bugs}
.RE
または
.RS
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
.RE
.PP
ブレース展開の導入によって、伝統的な \fBsh\fP とは少し非互換になった部分があります。 \fBsh\fP
は単語の一部として開きブレースや閉じブレースが現われても特別扱いはせず、 そのまま出力に残します。 \fBbash\fP
はブレース展開の結果として単語からブレースを取り除きます。例えば \fBsh\fP に \fIfile{1,2}\fP
のように入力された単語はそのままの形で出力されますが、 \fBbash\fP ではこの同じ単語は展開されて \fIfile1 file2\fP
のように出力されます。 厳密に \fBsh\fP と互換にしたければ、 \fBbash\fP を \fB+B\fP オプションを付けて起動するか、 \fBset\fP
コマンドに \fB+B\fP オプションを与えてブレース展開を無効にしてください (後述する
.SM
\fBシェル組み込みコマンド\fP を参照)。
.SS チルダ展開
.PP
クォートされていないチルダ (`\fB~\fP') で単語が始まった場合、 クォートされていないスラッシュよりも前にある文字全て
(クォートされていないスラッシュが無ければ全ての文字) はチルダプレフィックス (\fItilde\-prefix\fP) と解釈されます。
クォートされている文字がチルダプレフィックス中に無ければ、 チルダプレフィックス中のチルダ以降の文字は、 \fIログイン名 (login name)\fP
になるかもしれない文字列として扱われます。 このログイン名が空文字列ならば、チルダはシェルパラメータ
.SM
\fBHOME\fP
の値に置き換えられます。
.SM
\fBHOME\fP が設定されていない場合は、代わりにシェルを実行しているユーザの
ホームディレクトリに置き換えられます。 ログイン名が空でなければ、 チルダプレフィックスは指定されたログイン名に対応する
ホームディレクトリに置き換えられます。
.PP
チルダプレフィックスが `~+' ならば、チルダプレフィックスはシェル変数
.SM
\fBPWD\fP の値に置き換えられます。 チルダプレフィックスが
`~\-' ならば、シェル変数
.SM
\fBOLDPWD\fP の値に置き換えられます (値が設定されていれば)。
チルダプレフィックス中のチルダより後の文字が数値 \fIN\fP であれば (数値の前に `+' や `\-' を置くこともできます)、
チルダプレフィックスはディレクトリスタック内の対応する要素に置換されます。 置換される要素は、チルダプレフィックスを引き数として組み込みコマンド
\fBdirs\fP を実行したときに表示されるものです。 チルダプレフィックスにおけるチルダ以降の文字が、 先行する `+' や `\-'
のない数値である場合は、`+' であるとみなされます。
.PP
ログイン名が有効でない場合や、チルダ展開が失敗した場合には、 単語は置き換えられません。
.PP
全ての変数代入において、 \fB:\fP や \fB=\fP の直後にクォートされていないチルダプレフィックスがないかチェックが行われます。
もし見つかった場合にはこれらもチルダ展開されます。 したがって、
.SM
\fBPATH\fP,
.SM
\fBMAILPATH\fP,
.SM
\fBCDPATH\fP への代入にチルダを含むファイル名を使えば、 シェルは展開された値を代入します。
.SS パラメータの展開
.PP
`\fB$\fP' 文字があると、パラメータ展開、コマンド置換、 算術式展開が行われます。展開されるパラメータ名やシンボルは、 ブレースで括ることもできます。
ブレースは省略可能ですが、 変数の直後に変数名の一部と解釈できる文字が置かれた場合に、
その文字と共に変数が展開されてしまうのを防ぐために用意されています。
.PP
ブレースを使った場合、対になるのは最初に表れる `\fB}\fP' です。 ただしバックスラッシュでエスケープされているものや
クォートされている文字列中のものは含まれませんし、ブレースの内側にある 算術式展開やコマンド置換、パラメータ展開に入っているものも含まれません。
.PP
.PD 0
.TP
${\fIparameter\fP}
\fIparameter\fP の値に置換されます。ブレースが必要になるのは、 \fIparameter\fP が 2 桁以上の数字を持つ位置パラメータの場合や、
\fIparameter\fP の直後の文字を名前の一部として解釈させたくない場合です。
.PD
.PP
\fIparameter\fP の最初の文字が感嘆符ならば、変数間接展開が行われます。 \fBbash\fP は残りの \fIparameter\fP
からなる変数の値を変数の名前と見なします。 そしてそこで得られた名前の変数を展開した値を、置換処理の続きで使います。 これが \fI間接展開\fP です。
ただし ${!\fIprefix\fP*} や ${\fB!\fP\fIname\fP[\fI@\fP]} の展開は例外です。 これは以下で説明します。
間接展開を表すには、感嘆符は左ブレースの直後に続ける必要があります。
.PP
以下に示すそれぞれの場合、\fIword\fP に対してチルダ展開、 パラメータ展開、コマンド置換、算術式展開が行われます。
.PP
部分文字列展開以外の場合、以下の形式で、 \fBbash\fP はパラメータが設定されているか、空ではないかを調べます。
コロンを省略した場合には設定されているかどうかのみを調べます。
.PP
.PD 0
.TP
${\fIparameter\fP\fB:\-\fP\fIword\fP}
\fBデフォルトの値を使います\fP。 \fIparameter\fP が設定されていないか空文字列であれば、 \fIword\fP
を展開したものに置換されます。そうでなければ、 \fIparameter\fP の値に置換されます。
.TP
${\fIparameter\fP\fB:=\fP\fIword\fP}
\fBデフォルトの値を代入します\fP。 \fIparameter\fP が設定されていないか空文字列であれば、 \fIword\fP を展開したものが
\fIparameter\fP に代入されます。それから \fIparameter\fP の値への置換が行われます。
位置パラメータや特殊パラメータへの代入をこのように行うことはできません。
.TP
${\fIparameter\fP\fB:?\fP\fIword\fP}
\fB空文字列または設定されていない場合にエラーを表示します\fP。 \fIparameter\fP が空文字列または設定されていない場合、\fIword\fP
を展開したもの (\fIword\fP がなければ パラメータが空文字列または設定されていないことを示すメッセージ)
が標準エラー出力に出力されます。シェルが対話的でなければ、 シェルは終了します。パラメータに空文字列以外が設定されていれば、 \fIparameter\fP
の値への置換が行われます。
.TP
${\fIparameter\fP\fB:+\fP\fIword\fP}
\fB別の値を使用します\fP。 \fIparameter\fP が空文字列または設定されていなければ、空文字列に置換されます。 そうでなければ \fIword\fP
を展開したものに置換されます。
.TP
${\fIparameter\fP\fB:\fP\fIoffset\fP}
.PD 0
.TP
${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP}
.PD
\fB部分文字列展開\fP。 \fIparameter\fP を展開したものから最大 \fIlength\fP 文字を取り出します。 先頭の文字は \fIoffset\fP
で指定します。\fIlength\fP を省略すると、 \fIoffset\fP で指定した文字を先頭にして、 \fIparameter\fP
の残り全部が含まれる部分文字列に展開します。 \fIlength\fP と \fIoffset\fP は算術式です (後述の
.SM
\fB算術式評価\fP
を参照)。 \fIoffset\fP を評価すると 0 未満の数になる場合、この値は \fIparameter\fP の値の末尾からのオフセットとして使われます。
\fIlength\fP を評価すると 0 未満の数になる場合、 \fIparameter\fP が \fB@\fP ではなく、配列でも連想配列でもなければ、
この値は文字数ではなく \fIparameter\fP の値の末尾からのオフセットとして使われ、 展開結果は 2 つのオフセットの間の部分文字列となります。
\fIparameter\fP が \fB@\fP ならば、結果は \fIoffset\fP から始まる \fIlength\fP 個の位置パラメータになります。
\fIparameter\fP が @ または * のインデックスが付いている配列名ならば、 結果は配列の
${\fIparameter\fP[\fIoffset\fP]} を先頭とする要素 \fIlength\fP 個となります。 負の \fIoffset\fP
は、指定された配列の最大のインデックス + 1 からの相対値と解釈されます。 連想配列に部分文字列展開した場合の結果は決められていません。
負のオフセットを指定するときには、:\- 式と混同されないよう、 1 つ以上の空白でコロンと離す必要があることに注意してください。
位置パラメータを使う場合以外は、 部分文字列のインデックスは 0 から始まります。位置パラメータの場合には、 インデックスは 1 から始まります。
位置パラメータが使われて \fIoffset\fP が 0 の場合、 \fB$0\fP の値が先頭に置かれます。
.TP
${\fB!\fP\fIprefix\fP\fB*\fP}
.PD 0
.TP
${\fB!\fP\fIprefix\fP\fB@\fP}
.PD
\fB前方一致する変数名\fP。 \fIprefix\fP で始まる全ての変数の名前に展開して、
.SM
\fBIFS\fP
特殊変数の最初の文字によって区切ります。 ダブルクォートの中で \fI@\fP が使われた場合、それぞれの変数の名前は 別々の単語に展開されます。
.TP
${\fB!\fP\fIname\fP[\fI@\fP]}
.PD 0
.TP
${\fB!\fP\fIname\fP[\fI*\fP]}
.PD
\fB配列のキーのリスト\fP。 \fIname\fP が配列変数であれば、配列 \fIname\fP の インデックス (キー) のリストに展開されます。
\fIname\fP が配列でない場合は、\fIname\fP が設定されていれば 0 に、 そうでなければ空に展開されます。 ダブルクォートの中で \fI@\fP
が使われた場合、それぞれのキーは 別々の単語に展開されます。
.TP
${\fB#\fP\fIparameter\fP}
\fBパラメータの長さ\fP。 \fIparameter\fP の値に含まれる文字数に置換されます。 \fIparameter\fP が \fB*\fP または \fB@\fP
ならば、位置パラメータの数に置換されます。 \fIparameter\fP が \fB*\fP または \fB@\fP
が添字になっている配列名ならば、配列中の要素数に置換されます。
.TP
${\fIparameter\fP\fB#\fP\fIword\fP}
.PD 0
.TP
${\fIparameter\fP\fB##\fP\fIword\fP}
.PD
\fBパターンに前方一致した部分を取り除く\fP。 \fIword\fP が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが
\fIparameter\fP の値の先頭部分とマッチする場合、展開して得られる値は \fIparameter\fP を展開した値から最短一致パターン
(\*(lq\fB#\fP\*(rqの場合) または最長一致パターン (\*(lq\fB##\fP\*(rq の場合) を取り除いたものになります。 \fIparameter\fP が
\fB@\fP または \fB*\fP である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。
\fIparameter\fP が \fB@\fP または \fB*\fP が添字になっている配列変数である場合、
パターンを削除する操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
.TP
${\fIparameter\fP\fB%\fP\fIword\fP}
.PD 0
.TP
${\fIparameter\fP\fB%%\fP\fIword\fP}
.PD
\fBパターンに後方一致した部分を取り除く\fP。 \fIword\fP が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが
\fIparameter\fP を展開した値の末尾の部分とマッチする場合、展開結果は \fIparameter\fP を展開した値から最短一致パターン
(\*(lq\fB%\fP\*(rq の場合) または最長一致パターン (\*(lq\fB%%\fP\*(rq の場合) を取り除いたものになります。 \fIparameter\fP が
\fB@\fP または \fB*\fP である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。
\fIparameter\fP が \fB@\fP または \fB*\fP が添字になっている配列変数である場合、
パターンを削除する操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
.TP
${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP}
\fBパターンの置換\fP。 \fIpattern\fP が展開され、 パス名展開の場合と同じようなパターンを作ります。 \fIparameter\fP の展開が行われ、
その値のうち \fIpattern\fP に最長一致する部分が \fIstring\fP に置換されます。 \fIpattern\fP が \fB/\fP
で始まる場合には、\fIpattern\fP に マッチした部分は全て \fIstring\fP に置換されます。
そうでない場合には、最初にマッチした部分だけが置換されます。 \fIpattern\fP が \fB#\fP で始まる場合には、パターンは \fIparameter\fP
を展開した値の先頭にマッチしなければなりません。 \fIpattern\fP が \fB%\fP で始まる場合には、パターンは \fIparameter\fP
を展開した値の末尾にマッチしなければなりません。 \fIstring\fP が空の場合には \fIpattern\fP にマッチした部分は削除されます。
またこの場合には、\fIpattern\fP の後に続く \fB/\fP は省略可能です。 \fIparameter\fP が \fB@\fP または \fB*\fP
である場合、置換操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 \fIparameter\fP が \fB@\fP または
\fB*\fP が添字になっている配列変数である場合、 置換操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
.TP
${\fIparameter\fP\fB^\fP\fIpattern\fP}
.PD 0
.TP
${\fIparameter\fP\fB^^\fP\fIpattern\fP}
.TP
${\fIparameter\fP\fB,\fP\fIpattern\fP}
.TP
${\fIparameter\fP\fB,,\fP\fIpattern\fP}
.PD
\fB大文字小文字の変換\fP。 \fIparameter\fP に含まれるアルファベットの大文字小文字を変換します。 \fIpattern\fP が展開され、
パス名展開の場合と同じようなパターンを作ります。 \fB^\fP 演算子は \fIpattern\fP にマッチした小文字を大文字に変換します。 \fB,\fP 演算子は
\fIpattern\fP にマッチした大文字を小文字に変換します。 \fB^^\fP 演算子と \fB,,\fP 演算子は、マッチした全ての文字を変換します。 \fB^\fP
演算子と \fB,\fP 演算子の場合は、マッチした最初の文字だけ変換します。 \fIpattern\fP を省略した場合、\fB?\fP を指定したものとして扱われ、
全ての文字にマッチします。 \fIparameter\fP が \fB@\fP または \fB*\fP
である場合、大文字小文字の変換は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 \fIparameter\fP が添字に \fB@\fP
または \fB*\fP の付いた配列変数の場合は、配列の要素のそれぞれに大文字小文字の変換が適用され、 結果はリストに展開されます。
.SS コマンド置換
.PP
\fIコマンド置換 (command substitution)\fP を用いると、 コマンド名をコマンドの出力で置き換えられます。 コマンド置換には以下の
2 つの形式があります:
.RS
.PP
\fB$(\fP\fIcommand\fP\|\fB)\fP
.RE
または
.RS
\fB\`\fP\fIcommand\fP\fB\`\fP
.RE
.PP
\fBbash\fP は \fIcommand\fP を実行し、 command の標準出力でコマンド置換の部分を置き換えます。
この際、末尾の改行文字は削除されます。 文字列の途中にある改行文字は削除されませんが、 単語分割の際に削除されることがあります。 コマンド置換
\fB$(cat \fP\fIfile\fP\fB)\fP は、同じ意味を持ち、 しかも高速な \fB$(< \fP\fIfile\fP\fB)\fP に置き換え可能です。
.PP
バッククォートを使う古い形式の置換を用いたとき、 バックスラッシュは文字通りの意味を保ちますが、 \fB$\fP, \fB`\fP, \fB\e\fP
の前にある場合は例外となります。 コマンド置換は、バックスラッシュが前置されていない バッククォートまでの部分です。 $(\^\fIcommand\fP\|)
という形式を用いたときは、 括弧の間にある全ての文字がコマンドとなります。 特別扱いされる文字はありません。
.PP
コマンド置換は入れ子にできます。 バッククォート形式のときに入れ子を行うには、 内側のバッククォートをバックスラッシュでエスケープします。
.PP
置換がダブルクォート内部にある場合には、 置換の結果に対する単語分割とパス名展開は行われません。
.SS 算術式展開
.PP
算術式展開を使うと、算術式を評価して、その結果に置換できます。 算術式展開のフォーマットを次に示します:
.RS
.PP
\fB$((\fP\fIexpression\fP\fB))\fP
.RE
.PP
\fIexpression\fP はダブルクォート内部にある場合と同様に扱われますが、 括弧の内側のダブルクォートが特別扱いされることはありません。
式に含まれる全てのトークンに対して、 パラメータ展開・文字列展開・コマンド置換・クォートの削除が行われます。 算術式置換は入れ子にできます。
.PP
評価は後述の
.SM
\fB算術式評価\fP で示す規則に基づいて行われます。 \fIexpression\fP が不正であれば、 \fBbash\fP
は評価の失敗を示すメッセージを出力し、置換を全く行いません。
.SS プロセス置換
.PP
\fIプロセス置換 (process substitution)\fP がサポートされるのは、 名前付きパイプ (\fIFIFO\fP) または
ファイル・ディスクリプターの \fB/dev/fd\fP 形式での指定 をサポートしているシステムです。これは \fB<(\fP\fIlist\^\fP\fB)\fP
または \fB>(\fP\fIlist\^\fP\fB)\fP の形になります。 プロセス \fIlist\fP は、その入力や出力が \fIFIFO\fP または
\fB/dev/fd\fP 中の 何らかのファイルに接続された状態で実行されます。 このファイルの名前は、展開の結果として、
引き数の形で現在のコマンドに渡されます。 \fB>(\fP\fIlist\^\fP\fB)\fP の形式を使った場合、 ファイルへの書き込みは \fIlist\fP
への入力となります。 \fB<(\fP\fIlist\^\fP\fB)\fP の形式を使った場合、 引き数として渡されたファイルは \fIlist\fP
の出力を得るために読み込まれます。
.PP
利用可能であれば、プロセス置換 (process substitution) は、
パラメータ展開、変数展開、コマンド置換、算術式展開と同時に行われます。
.SS 単語の分割
.PP
パラメータ展開、コマンド置換、算術式展開が行われたのが、ダブル クォートの内側ではない場合、シェルは展開の結果をスキャンして、 \fI単語分割\fP
を行います。
.PP
シェルは
.SM
\fBIFS\fP のそれぞれの文字を区切り文字として扱い、 ほかの展開の結果をこれらの文字によって単語に分割します。
.SM
\fBIFS\fP が設定されていないか、その値がデフォルト値の \fB<スペース><タブ><改行>\fP
と全く同じならば、前段の展開の結果の先頭や末尾の \fB<スペース>\fP, \fB<タブ>\fP, \fB<改行>\fP
の並びは無視され、 先頭と末尾以外の
.SM
\fBIFS\fP 文字の並びで単語が区切られます。
.SM
\fBIFS\fP
の値がデフォルト以外のときに、 \fBスペース\fP や タブ という空白文字の並びが単語の先頭と末尾で無視されるのは、 その空白文字が
.SM
\fBIFS\fP の値に含まれるとき (
.SM
\fBIFS\fP の空白文字の一つであるとき) だけです。
.SM
\fBIFS\fP に含まれ、
.SM
\fBIFS\fP 空白文字ではない文字は全て、隣接する任意の
.SM
\fBIFS\fP 空白文字と一緒になってフィールドの区切りとなります。
.SM
\fBIFS\fP 空白文字の列も区切り文字として扱われます。
.SM
\fBIFS\fP の値が空文字列であれば、単語分割は全く行われません。
.PP
明示的に指定した空の引き数 (\^\fB"\^"\fP または \^\fB\(aq\^\(aq\fP\^) は削除されずに残ります。
クォートされていない暗黙的な空の引き数が、 値を持たないパラメータを展開した結果として得られますが、 これらは削除されます。
値を持たないパラメータがダブルクォート内部で展開されると、 空である引き数となり、消されずに残ります。
.PP
展開が行われなければ単語分割も行われない点に注意してください。
.SS パス名展開
.PP
\fB\-f\fP オプションが指定されていなければ、単語分割を行った後に \fBbash\fP はそれぞれの単語が \fB*\fP, \fB?\fP, \fB[\fP
を含んでいるかどうか調べます。 これらの文字のいずれかが見つかると、その単語は \fIパターン\fP とみなされ、 パターンにマッチするファイル名を
アルファベット順にソートしたリストに置換されます。 マッチするファイル名が見つからず、かつシェルのオプション \fBnullglob\fP
が無効ならば、その単語は変更されずにそのまま残ります。 \fBnullglob\fP オプションが設定されていて、かつマッチするファイル名が見つからなければ、
その単語は削除されます。 \fBfailglob\fP オプションが設定されていて、かつマッチするファイル名が見つからなければ、
エラーメッセージが表示されコマンドは実行されません。 シェルのオプション \fBnocaseglob\fP
が有効ならば、マッチングにおいてアルファベットの大文字と小文字は区別さ れません。 パターンをパス名展開に使うとき、名前の先頭やスラッシュの直後の
\fB\*(lq.\*(rq\fP は明示的にマッチさせなければなりません。ただしシェルのオプション \fBdotglob\fP が設定されている場合は例外です。
パス名のマッチングを行うとき、 スラッシュ文字は必ず明示的にマッチさせなければなりません。 これ以外の場合には、 \fB\*(lq.\*(rq\fP
が特別扱いされることはありません。 シェルのオプション \fBnocaseglob\fP, \fBnullglob\fP, \fBfailglob\fP,
\fBdotglob\fP の詳しい説明については、後述の
.SM
\fBシェルの組み込みコマンド\fP に書かれている \fBshopt\fP
の説明を参照してください。
.PP
シェル変数
.SM
\fBGLOBIGNORE\fP を使って、 \fIパターン\fP にマッチするファイル名の集合を制限できます。
.SM
\fBGLOBIGNORE\fP が設定されていれば、マッチするファイル名のうち
.SM
\fBGLOBIGNORE\fP 中のパターンにもマッチしたものは、
マッチしたもののリストから取り除かれます。 ファイル名 \fB\*(lq.\*(rq\fP と \fB\*(lq..\*(rq\fP は
.SM
\fBGLOBIGNORE\fP
に空でない値が設定されていても必ず無視されます。しかし、
.SM
\fBGLOBIGNORE\fP に空でない値を設定するとシェルオプションの
\fBdotglob\fP が有効になるので、 \fB\*(lq.\*(rq\fP で始まるほかのファイル名は全てマッチします。 \fB\*(lq.\*(rq\fP
で始めるファイル名を無視する古い動作をさせるには、 \fB\*(lq.*\*(rq\fP を
.SM
\fBGLOBIGNORE\fP のパターンに含めてください。
.SM
\fBGLOBIGNORE\fP を unset すると、 \fBdotglob\fP オプションは無効になります。
.PP
\fBパターンマッチング\fP
.PP
パターンに含まれる文字のうち、以下の特殊パターン文字以外の文字は、 自分自身にマッチします。NUL 文字がパターン中に現われてはいけません。
バックスラッシュは直後の文字をエスケープします。 このバックスラッシュは、マッチングでは無視されます
特殊パターン文字をその文字そのものにマッチさせるためには、 クォートしなければなりません。
.PP
特殊パターン文字は以下の意味を持っています:
.PP
.PD 0
.RS
.TP
\fB*\fP
空文字列を含む、任意の文字列にマッチします。 シェルオプション \fBglobstar\fP が有効で、 \fB*\fP がパス名展開に用いられる場面では、
連続する 2 つの \fB*\fP だけのパターンが使われると、 その階層以下のディレクトリとそのサブディレクトリ、 そこにある全てのファイルにマッチします。
2 つ連続した \fB*\fP の後に \fB/\fP が続く場合には、 ディレクトリとそのサブディレクトリのみにマッチします。
.TP
\fB?\fP
任意の 1 文字にマッチします。
.TP
\fB[...]\fP
括られた文字のうち任意の 1 文字にマッチします。 2 つの文字の間にハイフンを入れたものは、 \fI範囲表現 (range expression)\fP
を表します。 ソート順で両端を含む 2 つの文字の間にある任意の 1 文字と マッチします。 ソートには現在のロケールの照合順序 (collating
sequence) と文字セットが用いられます。 \fB[\fP の次の文字が \fB!\fP または \fB^\fP ならば、括られた文字に含まれない任意の 1
文字にマッチします。 範囲表現における文字のソート順は、 現在のロケール (およびシェル変数
.SM
\fBLC_COLLATE\fP
が指定されていればその値) によって決定されます。 \fB\-\fP は、文字集合の最初または最後の文字として含めると マッチングの対象にできます。 \fB]\fP
は、文字集合の最初の文字として含めるとマッチングの対象にできます。
.br
.if t .sp 0.5
.if n .sp 1
\fB[\fP と \fB]\fP の間では、\fI文字クラス (character classes)\fP を指定できます。 指定には
\fB[:\fP\fIclass\fP\fB:]\fP という記法を使います。ここで \fIclass\fP は POSIX 標準で定義されている以下のクラスのいずれかです:
.PP
.RS
.B
.if n alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
.if t alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
.br
文字クラスは、そのクラスの属する任意の文字にマッチします。 文字クラス \fBword\fP は、文字、数字、_ にマッチします。
.br
.if t .sp 0.5
.if n .sp 1
\fB[\fP と \fB]\fP の間では、\fI等値クラス (equivalence class)\fP を指定できます。 指定には \fB[=\fP\fIc\fP\fB=]\fP
という記法を使います。 これは現在のロケールにおける定義において \fIc\fP と同じ 照合重み (collation weight)
を持つ全ての文字にマッチします。
.br
.if t .sp 0.5
.if n .sp 1
\fB[\fP と \fB]\fP の間では、\fB[.\fP\fIsymbol\fP\fB.]\fP という記述は照合シンボル \fIsymbol\fP にマッチします。
.RE
.RE
.PD
.PP
組み込みコマンドの \fBshopt\fP を使ってシェルのオプション \fBextglob\fP が有効にされていると、
拡張パターンマッチング演算子がいくつか認識されるようになります。 以下の説明では、\fIpattern\-list\fP は \fB|\fP で区切られた 1
つ以上のパターンのリストであるものとします。 以下のサブパターンを 1 つあるいは複数使うことにより、 複合パターンを作れます。
.sp 1
.PD 0
.RS
.TP
\fB?(\fP\^\fIpattern\-list\^\fP\fB)\fP
与えられたパターンが 0 回または 1 回現われるとマッチします。
.TP
\fB*(\fP\^\fIpattern\-list\^\fP\fB)\fP
与えられたパターンが 0 回以上現われるとマッチします。
.TP
\fB+(\fP\^\fIpattern\-list\^\fP\fB)\fP
与えられたパターンが 1 回以上現われるとマッチします。
.TP
\fB@(\fP\^\fIpattern\-list\^\fP\fB)\fP
与えられたパターンに 1 回だけマッチします。
.TP
\fB!(\fP\^\fIpattern\-list\^\fP\fB)\fP
与えられたパターンのどれでもないものにマッチします。
.RE
.PD
.SS クォートの削除
.PP
先に処理される展開の後、クォートされていない \fB\e\fP, \fB'\fP, \^\fB"\fP\^ のうち、先の展開の結果でないものは全て削除されます。
.SH リダイレクト
シェルが解釈する特別な記法を用いると、コマンドの実行前に入出力を \fIリダイレクト\fP できます。またリダイレクトを使うと、
現在のシェル実行環境に対してファイルをオープンしたり クローズしたりできます。以下に示すリダイレクト演算子は、 \fI単純なコマンド\fP
の前や途中に置くことができ、また \fIコマンド\fP の後に置けます。 リダイレクトは左から右へと、現われた順に処理されます。
.PP
ファイル・ディスクリプター番号で始まるリダイレクトでは、 代わりに {\fIvarname\fP} という形式の単語で始めることもできます。
この場合、>&\- と <&\- 以外のリダイレクト演算子では、 シェルは 10 より大きいファイル・ディスクリプターを割り当て、
\fIvarname\fP に代入します。 {\fIvarname\fP} で始まる >&\- や <&\- の場合には、\fIvarname\fP の値は
クローズするファイル・ディスクリプターを示します。
.PP
以下の説明においては、ファイル・ディスクリプター番号が省略され、 かつリダイレクト演算子の最初の文字が \fB<\fP ならば、リダイレクトは標準入力
(ファイル・ディスクリプター 0) を参照します。 リダイレクト演算子の最初の文字が \fB>\fP ならば、リダイレクトは標準出力
(ファイル・ディスクリプター 1) を参照します。
.PP
以下の説明では、リダイレクト演算子の次の単語に対しては、 特に説明しない限り、 ブレース展開・チルダ展開・パラメータ展開・コマンド置換・
算術式展開・クォート削除・パス名展開・単語分割が行われます。 その単語が複数の単語に展開された場合はエラーになります。
.PP
リダイレクトの順番には意味がある点に注意してください。 例えば、次のコマンド
.RS
.PP
ls \fB>\fP dirlist 2\fB>&\fP1
.RE
.PP
は標準出力と標準エラー出力を両方ともファイル \fIdirlist\fP に書き込みますが、次のコマンド
.RS
.PP
ls 2\fB>&\fP1 \fB>\fP dirlist
.RE
.PP
では標準出力だけがファイル \fIdirlist\fP に書き込まれます。なぜなら後者の場合には、標準エラー出力は \fIdirlist\fP
にリダイレクトされる前の標準出力の複製となるからです。
.PP
\fBbash\fP は、 以下の表にあるようなファイル名がリダイレクトに使用されると、 それらを特別に扱います。
.RS
.PP
.PD 0
.TP
\fB/dev/fd/\fP\fIfd\fP
\fIfd\fP が有効な整数ならばファイル・ディスクリプター \fIfd\fP が複製されます。
.TP
\fB/dev/stdin\fP
ファイル・ディスクリプター 0 が複製されます。
.TP
\fB/dev/stdout\fP
ファイル・ディスクリプター 1 が複製されます。
.TP
\fB/dev/stderr\fP
ファイル・ディスクリプター 2 が複製されます。
.TP
\fB/dev/tcp/\fP\fIhost\fP\fB/\fP\fIport\fP
\fIhost\fP が有効なホスト名またはインターネットアドレスで \fIport\fP が整数のポート番号ならば、 \fBbash\fP は対応するソケットに対して
TCP 接続のオープンを試みます。
.TP
\fB/dev/udp/\fP\fIhost\fP\fB/\fP\fIport\fP
\fIhost\fP が有効なホスト名またはインターネットアドレスで \fIport\fP が整数のポート番号ならば、 \fBbash\fP は対応するソケットに対して
UDP 接続のオープンを試みます。
.PD
.RE
.PP
ファイルのオープンや作成に失敗すると、リダイレクトも失敗します。
.PP
9 より大きいファイル・ディスクリプターを使ったリダイレクトには注意が 必要です。シェルが内部的に使うファイル・ディスクリプターと競合する場合が
あるからです。
.SS 入力のリダイレクト
.PP
入力をリダイレクトすると、 \fIword\fP を展開した結果の名前を持つファイルがオープンされ、 ファイル・ディスクリプター \fIn\fP
で読み込めるようになります。 \fIn\fP が指定されていなければ、読み込みは標準入力 (ファイル・ディスクリプター 0) で行われます。
.PP
入力のリダイレクトは、一般的には以下の形式です:
.RS
.PP
[\fIn\fP]\fB<\fP\fIword\fP
.RE
.SS 出力のリダイレクト
.PP
出力をリダイレクトすると、 \fIword\fP の展開した結果の名前を持つファイルがオープンされ、 ファイル・ディスクリプター \fIn\fP
で書き込めるようになります。 \fIn\fP が指定されていなければ、書き込みは標準出力 (ファイル・ディスクリプター 1) に行われます。
ファイルが存在しなかった場合は作成されます。 ファイルが存在した場合はサイズ 0 に切り詰められます。
.PP
出力のリダイレクトは、一般的には以下の形式です:
.RS
.PP
[\fIn\fP]\fB>\fP\fIword\fP
.RE
.PP
リダイレクト演算子が \fB>\fP であり、かつ 組み込みコマンド \fBset\fP で \fBnoclobber\fP オプションが有効になっている場合、
\fIword\fP の展開で得たファイルが存在し、 かつそれが通常ファイルならば、リダイレクトは失敗します。 リダイレクト演算子が \fB>|\fP
の場合、もしくは リダイレクト演算子が \fB>\fP で組み込みコマンド \fBset\fP で \fBnoclobber\fP
オプションが有効になっていない場合、 \fIword\fP という名前のファイルが存在していてもリダイレクトが試みられます。
.SS リダイレクトによる追加出力
.PP
この形式を使って出力のリダイレクトを行うと、 \fIword\fP を展開した結果の名前を持つファイルがオープンされ、 ファイル・ディスクリプター \fIn\fP
に対する出力がこのファイルに追加されるようになります。 \fIn\fP を指定しなければ、標準出力 (ファイル・ディスクリプター 1) で追加されます。
ファイルが存在しなければ、新しく作られます。
.PP
追加出力は一般的には以下の形式です:
.RS
.PP
[\fIn\fP]\fB>>\fP\fIword\fP
.RE
.PP
.SS 標準出力と標準エラー出力のリダイレクト
.PP
この構造を使うと、 標準出力 (ファイル・ディスクリプター 1) と標準エラー出力 (ファイル・ディスクリプター 2) の両方を、 \fIword\fP
を展開した結果の名前を持つファイルにリダイレクトできます。
.PP
標準出力と標準エラー出力に対する形式は 2 つあります:
.RS
.PP
\fB&>\fP\fIword\fP
.RE
と
.RS
\fB>&\fP\fIword\fP
.RE
.PP
両者のうち望ましいのは前者の方です。 上記は以下と同じ意味です:
.RS
.PP
\fB>\fP\fIword\fP 2\fB>&\fP1
.RE
.PP
.SS 標準出力と標準エラー出力の追加出力
.PP
この構造を使うと、 標準出力 (ファイル・ディスクリプター 1) と標準エラー出力 (ファイル・ディスクリプター 2) の両方を、 \fIword\fP
を展開した結果の名前を持つファイルに追加できます。
.PP
標準出力と標準エラー出力の追加出力は以下の形式です:
.RS
.PP
\fB&>>\fP\fIword\fP
.RE
.PP
これは次のものと同じ意味です:
.RS
.PP
\fB>>\fP\fIword\fP 2\fB>&\fP1
.RE
.SS "ヒアドキュメント(Here Documents)"
.PP
この形式のリダイレクトを用いると、 シェルは現在のソースから入力を読み込みます。 この読み込みは \fIword\fP を単独で含む行
(末尾にブランク文字があってはいけません) が現われるまで続きます。 その行までに読み込んだ行は、 コマンドの標準入力として扱われます。
.PP
ヒアドキュメントの形式を以下に示します:
.RS
.PP
.nf
\fB<<\fP[\fB\-\fP]\fIword\fP
\fIhere\-document\fP
\fIdelimiter\fP
.fi
.RE
.PP
\fIword\fP に対するパラメータ展開・コマンド置換・算術式展開・ パス名展開は全く行われません。 \fIword\fP が一部でもクォートされている場合は、
\fIdelimiter\fP は \fIword\fP のクォートをほどいた結果 (クォート文字を削除した結果) となり、
ヒアドキュメントに含まれる行では展開が行われなくなります。 \fIword\fP がクォートされていなければ、 ヒアドキュメント中の全ての行に対して
パラメータ展開・コマンド置換・算術式展開が行われます。 \fIword\fP がクォートされていない場合には、 \fB\e<newline>\fP
という文字列は無視され、 \fB\e\fP, \fB$\fP, \fB`\fP といった文字は \fB\e\fP を用いてクォートしなければなりません。
.PP
リダイレクト演算子が \fB<<\-\fP ならば、行頭にあるタブ文字は全て入力行および \fIdelimiter\fP を含む行から取り除かれます。
これにより、シェルスクリプト中のヒアドキュメントを 自然な形でインデントさせることができます。
.SS "ヒアストリング(Here Strings)"
ヒアドキュメントの変形で、以下の形式です:
.RS
.PP
.nf
\fB<<<\fP\fIword\fP
.fi
.RE
.PP
\fIword\fP は展開されてコマンドの標準入力に与えられます。
.SS ファイル・ディスクリプターの複製
.PP
リダイレクト演算子
.RS
.PP
[\fIn\fP]\fB<&\fP\fIword\fP
.RE
.PP
を使うと入力ファイル・ディスクリプターを複製できます。 \fIword\fP が 1 桁以上の数値に展開された場合、 \fIn\fP
で示されるファイル・ディスクリプターが生成され、 \fIword\fP で指定された数値のファイル・ディスクリプターのコピーとなります。 \fIword\fP
に含まれる数値が入力用にオープンされたファイル・ディスクリプターを 指していない場合、リダイレクト・エラーが起きます。 \fIword\fP を評価した結果が
\fB\-\fP となった場合、ファイル・ディスクリプター \fIn\fP はクローズされます。 \fIn\fP が指定されていない場合、標準入力
(ファイル・ディスクリプター 0) が使われます。
.PP
同様に、演算子
.RS
.PP
[\fIn\fP]\fB>&\fP\fIword\fP
.RE
.PP
を使って出力ファイル・ディスクリプターを複製できます。 \fIn\fP が指定されていない場合は、標準出力 (ファイル・ディスクリプター 1) が使われます。
\fIword\fP に含まれる数値が、出力用にオープンされた ファイル・ディスクリプターを指していない場合、
リダイレクト・エラーが起きます。特別な場合ですが、 \fIn\fP が省略され、かつ \fIword\fP が 1 桁以上の数字には展開されなかった場合、
前に説明したように標準出力と標準エラー出力がリダイレクトされます。
.SS ファイル・ディスクリプターの変更
.PP
リダイレクト演算子
.RS
.PP
[\fIn\fP]\fB<&\fP\fIdigit\fP\fB\-\fP
.RE
.PP
を使うと、ファイル・ディスクリプターの \fIdigit\fP を \fIn\fP に変更します。 \fIn\fP が指定されていない場合は、標準入力
(ファイル・ディスクリプター 0) が使われます。 \fIdigit\fP は \fIn\fP に複製された後にクローズされます。
.PP
同様に、演算子
.RS
.PP
[\fIn\fP]\fB>&\fP\fIdigit\fP\fB\-\fP
.RE
.PP
を使うと、ファイル・ディスクリプターの \fIdigit\fP を \fIn\fP に変更します。 \fIn\fP が指定されていない場合は、標準出力
(ファイル・ディスクリプター 1) が使われます。
.SS 読み書きのためのファイル・ディスクリプターのオープン
.PP
リダイレクト演算子
.RS
.PP
[\fIn\fP]\fB<>\fP\fIword\fP
.RE
.PP
を使うと、 \fIword\fP を展開した結果の名前を持つファイルがファイル・ディスクリプター \fIn\fP での読み書きのためにオープンされます。 \fIn\fP
が指定されていなければ、 ファイル・ディスクリプター 0 で読み書きが行われます。 ファイルが存在しなければ、新しく生成されます。
.SH エイリアス
\fIエイリアス(alias)\fP を使うと、 ある単語が単純なコマンドの先頭の単語として使われた場合に、 この文字列を別の単語に置換できます。
シェルはエイリアスのリストを管理しています。 このリストは組み込みコマンドの \fBalias\fP と \fBunalias\fP を使って設定および削除できます
(後述の
.SM
\fBシェルの組み込みコマンド\fP を参照)。 各コマンドの最初の単語がクォートされていない場合、 エイリアスかどうかが確認され、
エイリアスならばその単語はそのエイリアスのテキストと置換されます。 \fB/\fP、\fB$\fP、\fB\`\fP、\fB=\fP、シェルの \fIメタ文字
(metacharacters)\fP やクォート文字はエイリアス名には使えません。 エイリアス名と置換されるテキストには、
シェルの入力として有効なものは何でも含めることができます。 これには先に挙げた \fIメタ文字\fP も含まれます。 置換されたテキストの最初の単語に対しても
エイリアスかどうかの評価がされますが、 最初の単語が展開されるエイリアスと同じ場合には 展開は一度しか行われません。つまり \fBls\fP が \fBls
\-F\fP のエイリアスとなっているような場合には、 \fBbash\fP は置換される文字列を再帰的に展開することはありません。 エイリアスの値の最後の文字が
\fIブランク文字\fP の場合、エイリアスに続く次のコマンドの単語に対しても エイリアス展開が試みられます。
.PP
エイリアスは \fBalias\fP コマンドで作成とリスト表示を行い、 \fBunalias\fP コマンドで削除します。
.PP
置換されるテキストに引き数を入れる仕組みはありません。 引き数が必要ならば、シェル関数を使わなければなりません (後述の
.SM
\fB関数\fP
を参照)
.PP
シェルが対話的でないときには、 \fBshopt\fP コマンドによって \fBexpand_aliases\fP オプションが設定されていない場合に限り、
エイリアスの展開は行われません (後述の
.SM
\fBシェルの組み込みコマンド\fP における \fBshopt\fP の説明を参照)。
.PP
エイリアスの定義や利用に関係する規則には、紛らわしい点があります。 \fBbash\fP は、ある行に書かれているコマンドを実行する前に必ず、 少なくとも 1
回は行全体を読み込みます。 エイリアスが展開されるのはコマンドを読み込んだときであり、 実行するときではありません。
したがって、別のコマンドと同じ行でエイリアス定義を行った場合には、 次の入力行が読み込まれるまではエイリアスの効果は現われません。
同じ行にあるエイリアス定義の後のコマンドは、 新しいエイリアスの影響を受けません。 この動作は関数を実行する場合にも問題になります。
エイリアスが展開されるのは関数定義が読み込まれるときであり、 関数が実行されるときではありません。 なぜなら、関数定義自身も複合コマンドだからです。
その結果として、関数内で定義されたエイリアスは、 その関数が実行されるまでは利用できません。 安全のため、エイリアス定義は独立した行で行うべきです。
複合コマンド内で \fBalias\fP を使ってはいけません。
.PP
ほとんど全ての用途において、 シェル関数でエイリアスを代用できます。
.SH 関数
シェル関数は、後で使うために一連のコマンドを保存するものです。 シェル関数の定義は既に
.SM
\fBシェルの文法\fP で説明しています。
シェル関数名が単純なコマンド名として使われた場合、 関数名に対応するコマンド群が実行されます。 関数は現在のシェルのコンテキスト内で実行されます。
つまり、新しいプロセスを生成して関数を処理することはありません (これはシェルスクリプトと対照的な点です)。
関数の実行時には、関数に与えた引き数が位置パラメータとなります。 特殊パラメータ \fB#\fP は更新され、この変更が反映されます。 特殊パラメータ
\fB0\fP は変わりません。 関数の実行中は
.SM
\fBFUNCNAME\fP 変数の最初の要素に関数の名前が設定されます。
.PP
上記以外は、シェル実行環境の状態は全て、関数とその呼び出し側で同じになります。 ただし、以下の例外があります:
.SM
\fBDEBUG\fP と
\fBRETURN\fP のトラップ (後述の
.SM
\fBシェルの組み込みコマンド\fP の項で、組み込みコマンド \fBtrap\fP の説明を参照) は、
関数に \fBtrace\fP 属性 (後述の組み込みコマンド
.SM
\fBdeclare\fP の説明を参照) が与えられている場合や、\fB\-o
functrace\fP シェルオプションが 組み込みコマンド \fBset\fP によって有効になっている (つまり、全ての関数が \fBDEBUG\fP と
\fBRETURN\fP のトラップを継承している) 場合を除いて 継承されません。
.SM
\fBERR\fP トラップは、\fB\-o errtrace\fP
シェルオプションが有効になっていない限り 継承されません。
.PP
関数ローカルの変数は、組み込みコマンド \fBlocal\fP で宣言できます。 普通は、変数とその値は関数とその呼び出し側で共有されます。
.PP
\fBFUNCNEST\fP 変数に 0 より大きい数値をセットすると、 関数呼び出しを何重まで許すかの最大レベルを決めます。
このレベルを超えて関数を呼び出すと、コマンドが異常終了します。
.PP
組み込みコマンド \fBreturn\fP が関数中で実行された場合、関数は完了し、 関数呼び出しの次のコマンドから実行が再開されます。
再開される前に、\fBRETURN\fP トラップに設定されたコマンドが実行されます。 関数の完了時には、位置パラメータの値と特殊パラメータ \fB#\fP
の値は、関数の実行前の値に戻ります。
.PP
関数の名前と定義をリスト表示するには、組み込みコマンドの \fBdeclare\fP や \fBtypeset\fP を、オプション \fB\-f\fP
を付けて実行します。 \fBdeclare\fP や \fBtypeset\fP をオプション \fB\-F\fP で実行すると、関数名だけがリスト表示されます。
また、\fBextdebug\fP シェルオプションが有効になっていると、 ソースファイルと行番号も表示されます。 関数をエクスポートして、
サブシェルでその関数が自動的に定義されている状態にできます。 これを行うには、組み込みコマンドの \fBexport\fP に \fB\-f\fP
オプションを付けて実行します。 組み込みコマンドの \fBunset\fP に \fB\-f\fP オプションを付けて実行することで、
関数定義を削除することもできます。 同じ名前のシェル関数と変数がシェルの子プロセスにエクスポートされると、
同じ環境の中に全く同じ名前のエントリが複数できてしまうことに 注意してください。これが問題を起こす場合には注意が必要です。
.PP
関数は再帰させることができます。\fBFUNCNEST\fP 変数を使うと、 関数の呼び出しスタックの深さを制限し、関数の呼び出し回数を制限する
ことができます。 デフォルトでは再帰呼び出し回数に制限は課せられていません。
.SH 算術式評価
シェルにおいては、特定の状況下で算術式を評価させることができます (組み込みコマンドの \fBlet\fP と \fB算術式展開\fP を参照)。
評価は固定長の整数として行われ、 オーバーフローのチェックは行われません。 ただし、0 での除算はトラップされ、エラーとしてのフラグが立てられます。
演算子とその優先度、結合規則は C 言語と同じです。 以下のリストは、 同じ優先度を持つ演算子をグループとしてまとめて列挙したものです。
優先度の高いものから順に列挙しています。
.PP
.PD 0
.TP
\fIid\fP\fB++ \fP\fIid\fP\fB\-\-\fP
変数を評価し、その後 increment (加算)/ decrement (減算) する。
.TP
\fB++\fP\fIid\fP\fB \-\-\fP\fIid\fP
変数を increment (加算) / decrement (減算) してから評価する。
.TP
\fB\- +\fP
単項式の負と正
.TP
\fB! ~\fP
論理的否定とビット単位の否定
.TP
\fB**\fP
指数 (累乗)
.TP
\fB* / %\fP
乗算、除算、剰余
.TP
\fB+ \-\fP
加算と減算
.TP
\fB<< >>\fP
左ビットシフトと右ビットシフト
.TP
\fB<= >= < >\fP
比較
.TP
\fB== !=\fP
等値と非等値
.TP
\fB&\fP
ビット単位の AND
.TP
\fB^\fP
ビット単位の排他的 OR
.TP
\fB|\fP
ビット単位の OR
.TP
\fB&&\fP
論理的 AND
.TP
\fB||\fP
論理的 OR
.TP
\fIexpr\fP\fB?\fP\fIexpr\fP\fB:\fP\fIexpr\fP
条件付き実行
.TP
\fB= *= /= %= += \-= <<= >>= &= ^= |=\fP
代入
.TP
\fIexpr1\fP\fB , \fP\fIexpr2\fP
コンマ
.PD
.PP
シェル変数をオペランドにすることもできます。 パラメータ展開は式の評価より前に行われます。 式の中では、シェル変数を (パラメータ展開規則を用いずに)
変数名で参照できます。 値が空のシェル変数や宣言されていないシェル変数は、 パラメータの展開の文法を使わずに名前を参照されると、 0
として評価されます。 変数の値は、変数が参照されたときや、\fBdeclare \-i\fP によって \fI整数\fP 属性が設定された変数に値が代入されるときに、
算術式として評価されます。 空の値は 0 として評価されます。 式で用いるためにシェル変数の \fI整数属性\fP を有効にする必要はありません。
.PP
先頭が 0 である定数は 8 進数として解釈されます。 先頭が 0x または 0X ならば 16 進数として解釈されます。 それ以外の場合には、数値は
[\fIbase#\fP]n の形式で表します。ここで \fIbase\fP は 2 から 64 の間の 10 進数であり、算術的な意味での基数を表します。
\fIn\fP はその基数における数を表します。 \fIbase#\fP が省略されると 10 進数となります。 ある桁において 9
より大きい数字を表すには文字を使います。 文字を使う場合には、アルファベット小文字、大文字、@, _ をこの順番で使います。 \fIbase\fP が 36
以下の場合には、大文字と小文字は区別されず、 大文字と小文字のどちらを使っても 10 から 35 までの数字を表現できます。
.PP
演算子は優先度の順に評価されます。括弧内にある部分式は最初に評価され、 前述の優先規則よりも優先させることができます。
.SH 条件式
条件式は複合コマンド \fB[[\fP と組み込みコマンドの \fBtest\fP および \fB[\fP によって使用でき、ファイルの属性を調べたり、
文字列比較や算術式比較を行ったりできます。 式は以下に示す単項のプライマリや二値のプライマリから構成されます。 プライマリのいずれかの \fIfile\fP
引き数が \fI/dev/fd/n\fP という形式ならば、 ファイル・ディスクリプター \fIn\fP が調べられます。 プライマリのいずれかの \fIfile\fP
引き数が \fI/dev/stdin\fP、\fI/dev/stdout\fP、\fI/dev/stderr\fP のいずれかであれば、
対応するファイル・ディスクリプター 0、1、2 が調べられます。
.PP
ほかに指定されていなければ、ファイルに対するプライマリはシンボリックリンク を辿り、リンク自身ではなくリンク先を対象とします。
.if t .sp 0.5
.if n .sp 1
\fB[[\fP では \fB<\fP と \fB>\fP の演算子は現在のロケールでの辞書順で 比較します。\fBtest\fP コマンドは ASCII
順で比較します。
.sp 1
.PD 0
.TP
\fB\-a \fP\fIfile\fP
\fIfile\fP が存在すれば真となります。
.TP
\fB\-b \fP\fIfile\fP
\fIfile\fP が存在し、かつブロック特殊ファイルならば真となります。
.TP
\fB\-c \fP\fIfile\fP
\fIfile\fP が存在し、かつキャラクター特殊ファイルならば真となります。
.TP
\fB\-d \fP\fIfile\fP
\fIfile\fP が存在し、かつディレクトリならば真となります。
.TP
\fB\-e \fP\fIfile\fP
\fIfile\fP が存在すれば真となります。
.TP
\fB\-f \fP\fIfile\fP
\fIfile\fP が存在し、かつ通常ファイルならば真となります。
.TP
\fB\-g \fP\fIfile\fP
\fIfile\fP が存在し、かつ set\-group\-id されていれば真となります。
.TP
\fB\-h \fP\fIfile\fP
\fIfile\fP が存在し、かつシンボリックリンクならば真となります。
.TP
\fB\-k \fP\fIfile\fP
\fIfile\fP が存在し、かつ \*(lqsticky\*(rq ビットが設定されていれば真となります。
.TP
\fB\-p \fP\fIfile\fP
\fIfile\fP が存在し、かつ名前付きパイプ (FIFO) ならば真となります。
.TP
\fB\-r \fP\fIfile\fP
\fIfile\fP が存在し、かつ読み込み可能ならば真となります。
.TP
\fB\-s \fP\fIfile\fP
\fIfile\fP が存在し、かつそのサイズが 0 より大きければ真となります。
.TP
\fB\-t \fP\fIfd\fP
ファイル・ディスクリプター \fIfd\fP がオープンされており、かつ端末を参照していれば真となります。
.TP
\fB\-u \fP\fIfile\fP
\fIfile\fP が存在し、 かつ set\-user\-id ビットが設定されていれば真となります。
.TP
\fB\-w \fP\fIfile\fP
\fIfile\fP が存在し、かつ書き込み可能ならば真となります。
.TP
\fB\-x \fP\fIfile\fP
\fIfile\fP が存在し、かつ実行可能ならば真となります。
.TP
\fB\-G \fP\fIfile\fP
\fIfile\fP が存在し、かつ (実行中のシェルの) 実効グループ ID に所有されていれば真となります。
.TP
\fB\-L \fP\fIfile\fP
\fIfile\fP が存在し、かつシンボリックリンクならば真となります。
.TP
\fB\-N \fP\fIfile\fP
\fIfile\fP が存在し、 かつ前回読み込まれた以降に修正されていれば真となります。
.TP
\fB\-O \fP\fIfile\fP
\fIfile\fP が存在し、かつ (実行中のシェルの) 実効ユーザ ID に所有されていれば真となります。
.TP
\fB\-S \fP\fIfile\fP
\fIfile\fP が存在し、かつソケットならば真となります。
.TP
\fIfile1\fP \fB\-ef\fP \fIfile2\fP
\fIfile1\fP と \fIfile2\fP とで デバイス番号と i\-ノード番号が同じならば真となります。
.TP
\fIfile1\fP \-\fBnt\fP \fIfile2\fP
\fIfile1\fP が (変更日時に関して) \fIfile2\fP より新しいか、 \fIfile1\fP が存在するが \fIfile2\fP
が存在しなければ、真となります。
.TP
\fIfile1\fP \-\fBot\fP \fIfile2\fP
\fIfile1\fP が \fIfile2\fP より古いか、 \fIfile2\fP が存在するのに \fIfile1\fP が存在しなければ、真となります。
.TP
\fB\-o \fP\fIoptname\fP
シェルオプション \fIoptname\fP が有効ならば真となります。後述する組み込みコマンド \fBset\fP に対するオプションの説明中にある \fB\-o\fP
オプションを参照してください。
.TP
\fB\-v \fP\fIvarname\fP
シェル変数 \fIvarname\fP がセットされている (値が代入されている) ならば真となります。
.TP
\fB\-z \fP\fIstring\fP
\fIstring\fP の長さが 0 ならば真となります。
.TP
\fIstring\fP
.PD 0
.TP
\fB\-n \fP\fIstring\fP
.PD
\fIstring\fP の長さが 0 でなければ真となります。
.TP
\fIstring1\fP \fB==\fP \fIstring2\fP
.PD 0
.TP
\fIstring1\fP \fB=\fP \fIstring2\fP
.PD
文字列が同じならば真となります。 POSIX に準拠する形で \fBtest\fP コマンドを使う場合には \fB=\fP を使う必要があります。
.TP
\fIstring1\fP \fB!=\fP \fIstring2\fP
2 つの文字列が異なれば真となります。
.TP
\fIstring1\fP \fB<\fP \fIstring2\fP
現在のロケールにおいて、\fIstring1\fP が \fIstring2\fP よりも 辞書順で前にある場合に真となります。
.TP
\fIstring1\fP \fB>\fP \fIstring2\fP
現在のロケールにおいて、\fIstring1\fP が \fIstring2\fP よりも 辞書順で後にある場合に真となります。
.TP
\fIarg1 \fP\fBOP\fP\fI arg2\fP
.SM
\fBOP\fP は \fB\-eq\fP, \fB\-ne\fP, \fB\-lt\fP, \fB\-le\fP, \fB\-gt\fP, \fB\-ge\fP. のいずれかです。
これらの算術二値演算子が真を返すのはそれぞれ、 \fIarg1\fP が \fIarg2\fP に対して等しい場合、
等しくない場合、小さい場合、小さいか等しい場合、大きい場合、 大きいか等しい場合です。 \fIarg1\fP や \fIarg2\fP
には、正または負の整数を使用できます。
.PD
.SH 単純なコマンドの展開
単純なコマンドを実行すると、シェルは以下に示す展開、代入、 リダイレクションを左から右の順で実行します。
.IP 1.
パーザが変数代入 (コマンド名の前にあるもの) またはリダイレクションと判断した単語は、 保存されて後で処理されます。
.IP 2.
変数代入でもリダイレクションでもない単語が展開されます。 もし展開の後に残っている単語があれば、
その最初の単語がコマンド名となり、残りが引き数となります。
.IP 3.
リダイレクションが前述の
.SM
\fBリダイレクト\fP で説明したように実行されます。
.IP 4.
変数代入の \fB=\fP の後にあるテキストに対して、チルダ展開、 パラメータ展開、コマンド置換、算術式展開、クォート削除が行われます。
この処理は変数を代入する前に行われます。
.PP
コマンド名が残らなかった場合には、 変数を代入した結果が現在のシェル環境に効果を及ぼします。
それ以外の場合、変数は実行されるコマンドの環境に追加されるだけで、 現在のシェル環境には影響を与えません。
読み込み専用の変数に対して代入をしようとするとエラーが発生し、 そのコマンドは 0 でないステータスで終了します。
.PP
コマンド名が残らなかった場合、リダイレクションは行われますが、 現在のシェル環境は影響を受けません。 リダイレクションのエラーが起きると、 コマンドは
0 でないステータスで終了します。
.PP
展開の後にコマンド名が残っている場合、後述するように実行が進行します。 そうでない場合はコマンドは終了します。
展開のいずれかがコマンド置換である場合には、 コマンドの終了ステータスは 最後に実行されたコマンド置換の終了ステータスになります。
コマンド置換が行われなかった場合には、 コマンドはステータス 0 で終了します。
.SH コマンドの実行
コマンドが単語に分割された後に、 単純なコマンドとそれに対する引き数リスト (引き数リストは省略可能) となった場合、以下の動作が行われます。
.PP
コマンド名にスラッシュが含まれない場合、 シェルはコマンドの位置を特定しようとします。 その名前のシェル関数が存在すれば、前に
.SM
\fB関数\fP
で説明したようにその関数が呼び出されます。 名前が関数にマッチしない場合には、 シェルはシェルの組み込みコマンドのリストを探します。
マッチするものがあった場合、その組み込みコマンドが呼び出されます。
.PP
名前がシェル関数も組み込みコマンドでなく、 かつスラッシュを含まない場合には、 \fBbash\fP は
.SM
\fBPATH\fP
の各要素を検索し、その名前の実行ファイルを含むディレクトリを探します。 \fBbash\fP はハッシュ表を使って実行ファイルの完全なパス名を記憶します
(後述の
.SM
\fBシェルの組み込みコマンド\fP の \fBhash\fP の項を参照)。
.SM
\fBPATH\fP
に含まれるディレクトリの完全な探索は、 そのコマンドがハッシュ表の中にない場合にのみ行われます。 探索に失敗すると、シェルは
\fBcommand_not_found_handle\fP という名前のシェル関数の定義を探します。
存在する場合には、元のコマンドと元のコマンドの引き数を引き数として、 この関数を呼び出します。この関数の終了ステータスがシェルの
終了ステータスとなります。 この関数が定義されていない場合には、シェルはエラーメッセージを 表示して終了ステータス 127 を返します。
.PP
検索に成功したか、コマンド名に 1 つ以上のスラッシュが含まれる場合には、 シェルは指定されたプログラムを独立した実行環境で実行します。 引き数 0
には指定された名前が設定され、 コマンドに対する残りの引き数には (もしあれば) 指定された引き数が設定されます。
.PP
このファイルが実行可能フォーマットでないために実行が失敗し、 かつディレクトリでもない場合には、 このファイルは \fIシェルスクリプト(shell
script)\fPであるとみなされます。 シェルスクリプトとは、シェルのコマンドが書かれているファイルのことです。
シェルスクリプトを実行するためにサブシェルが呼び出されます。 このサブシェルは自分自身を再初期化し、 シェルスクリプトを処理するために
新しいシェルが起動されたかのような結果になります。ただし、 親が記憶しているコマンドの位置 (後述の
.SM
\fBシェルの組み込みコマンド\fP
における \fBhash\fP の項を参照) は子にも引き継がれます。
.PP
プログラムが \fB#!\fP で始まるファイルである場合、 最初の行の残りの部分はこのプログラムのインタプリタを指定します。
シェルは指定されたインタプリタをオペレーティングシステム上で実行します。 オペレーティングシステムは、この実行可能フォーマットを直接処理しません。
インタプリタに対する引き数は、 プログラムの先頭の行のインタプリタ名の後の省略可能な引き数 1 つと、 その後のプログラム名、さらに (もしあれば)
その後のコマンドへの引き数から構成されます。
.SH コマンド実行環境
シェルは以下の要素からなる\fI実行環境(execution environment)\fPを持ちます:
.IP \(bu
起動時にそのシェルが継承したオープンされているファイル。 これは組み込みコマンド \fBexec\fP に与えられている リダイレクション機能で変更されます。
.IP \(bu
現在の作業ディレクトリ (current working directory)。これは \fBcd\fP, \fBpushd\fP, \fBpopd\fP で設定するか、
あるいは起動時にそのシェルが継承します。
.IP \(bu
ファイル作成モードのマスク。 これは \fBumask\fP で設定するか、あるいはそのシェルの親から継承します。
.IP \(bu
\fBtrap\fP で設定された現在のトラップ。
.IP \(bu
シェルのパラメータ。これは変数の代入か \fBset\fP で設定されるか、 あるいはその環境内にある親シェルから継承します。
.IP \(bu
実行中に定義されるか、その環境内にある親シェルから継承したシェル関数。
.IP \(bu
起動時に有効にしたか (デフォルト値あるいはコマンドライン引き数で設定した値)、 \fBset\fP で有効にしたオプション。
.IP \(bu
\fBshopt\fP で有効にしたオプション。
.IP \(bu
\fBalias\fP で定義したシェルエイリアス。
.IP \(bu
各種プロセスID。これにはバックグラウンドジョブや \fB$$\fP の値、
.SM
\fBPPID\fP の値が含まれます。
.PP
組み込みコマンドやシェル関数以外の単純なコマンドを実行するとき、 このコマンドは独立した実行環境内で呼び出されます。
この環境は以下の要素から成り立っています。 特に断らない限り、この値はシェルから引き継がれます。
.if n .sp 1
.IP \(bu
シェルのオープンしているファイルと、 コマンドに対するリダイレクションで指定した変更・追加を加えたもの。
.IP \(bu
現在の作業ディレクトリ
.IP \(bu
ファイル作成モードのマスク
.IP \(bu
エクスポートするシェル変数や関数と、 そのコマンドに対してエクスポートされた変数。 これらは環境で渡されます。
.IP \(bu
シェルに捕捉されるトラップは、 そのシェルの親から継承された値に再設定されます。 そのシェルにより無視されるトラップは無視されます。
.PP
この独立の環境内で呼び出されたコマンドが、 (親である) シェルの実行環境に影響を及ぼすことはできません。
.PP
コマンド置換や括弧でグループ化されたコマンド、非同期コマンドは、 サブシェル環境内で呼び出されます。 このサブシェル環境はシェル環境を複製したものです。
ただし、シェルにより捕捉されるトラップは、 そのシェルの起動時に親から継承した値に再設定されます。
パイプラインの一部として起動された組み込みコマンドは、 サブシェル環境で実行されます。サブシェル環境に対して行われた変更は、
元のシェル実行環境に影響を及ぼすことはできません。
.PP
コマンド置換を実行するために起動されたサブシェルは、 \fB\-e\fP オプションの値を親シェルから継承します。 \fIposix\fP
モードでない場合、\fBbash\fP はそのサブシェルでは \fB\-e\fP オプションをクリアします。
.PP
コマンドの後に \fB&\fP が付けられたときに、ジョブ制御が有効でなければ、 コマンドのデフォルトの標準入力は空ファイル \fI/dev/null\fP
となります。 そうでなければ、呼び出されたコマンドは、呼び出したシェルの ファイル・ディスクリプターを、リダイレクトも含めて継承します。
.SH 環境
プログラムの起動時には、 \fI環境 (environment)\fP と呼ばれる文字列の配列が渡されます。 これは \fI変数名\fP\-\fI値\fP
のペアからなるリストで、 \fI変数名\fP=\fI値\fP という形になります。
.PP
シェルは、環境を操作する様々な方法を提供しています。 起動時には、シェルは自分自身の環境を調べ、 見つかった名前それぞれに対してパラメータを生成し、
それに自動的に子プロセスへの \fIエクスポート (export)\fP の印を付けます。実行されたコマンドは環境を継承します。 \fBexport\fP
コマンドまたは \fBdeclare \-x\fP コマンドを用いると、 パラメータや関数の追加と削除を環境に対して行えます。
環境内のパラメータの値が変更されると、 新しい値は環境の一部となり、古い値と置き換わります。 実行されたコマンドが継承する環境は、
シェルの最初の環境から、 変数の値がシェル中で変更されたり、 一部のペアが \fBunset\fP コマンドで削除されたり、 \fBexport\fP コマンドや
\fBdeclare \-x\fP コマンドで追加されたりしたものになります。
.PP
\fI単純なコマンド\fP や関数に対する環境は、一時的に修正できます。 これは、既に
.SM
\fBパラメータ\fP
の項で説明したように、パラメータ代入を前に置くことで行います。 このような代入が影響を与えるのは、 そのコマンドが参照する環境だけです。
.PP
\fB\-k\fP オプションを設定 (後述の組み込みコマンド \fBset\fP を参照) すると、コマンド名の前に置いたものだけではなく、 \fI全ての\fP
パラメータ代入がそのコマンドの環境に影響を与えます。
.PP
\fBbash\fP が外部コマンドを起動したときには、変数 \fB_\fP にはコマンドの完全なファイル名が設定され、 環境変数としてそのコマンドに渡されます。
.SH 終了ステータス
.PP
実行したコマンドの終了ステータスは、\fIwaitpid\fP システムコールまたはそれに相当する関数が返した値です。 終了ステータスは 0 から 255
の値を取りますが、後述するように、 125 より大きい値は特別にシェルによって使われることがあります。
シェルの組み込みコマンドや複合コマンドの終了ステータスも、 同じ範囲に限定されています。 環境によっては、シェルは仕様で決められた失敗のモードを表す
特別の値を使います。
.PP
シェルは、終了コード 0 で終了したコマンドは正常終了したとみなします。 終了コード 0 は成功を示します。 0 以外の終了コードは失敗を示します。
あるコマンドが致命的なシグナル \fIN\fP で終了したときには、 \fBbash\fP は「128+\fIN\fP」の値を終了ステータスに使います。
.PP
コマンドが見つからなかった場合には、 そのコマンドを実行するために生成された子プロセスが ステータス 127 を返します。
コマンドが見つかったけれど実行できなかった場合には、 ステータスは 126 です。
.PP
展開やリダイレクションの際にエラーが発生し コマンドが失敗した場合には、 0 より大きい終了ステータスが返されます。
.PP
シェルの組み込みコマンドは、 成功した場合にはステータス 0 (\fI真\fP) を返し、 実行中にエラーが起こった場合には 0 でない値 (\fI偽\fP)
を返します。 組み込みコマンドは全て、正しくない使い方であることを示すのに 終了ステータス 2 を返します。
.PP
\fBbash\fP 自身が返す終了ステータスは、文法エラーが起きた場合を除き、 実行した最後のコマンドの終了ステータスです。 文法エラーの場合には 0
でない値が終了ステータスとなります。 後述の組み込みコマンド \fBexit\fP も参照してください。
.SH シグナル
\fBbash\fP が対話的であり、トラップが全くないとき、\fBbash\fP は
.SM
\fBSIGTERM\fP を無視し (したがって \fBkill
0\fP では対話シェルは kill されません)、
.SM
\fBSIGINT\fP を捕捉し処理します (したがって組み込みコマンド \fBwait\fP
は割り込み可能です)。 どんな場合でも、\fBbash\fP は
.SM
\fBSIGQUIT\fP を無視します。 ジョブ制御が有効な状態ならば、
\fBbash\fP は
.SM
\fBSIGTTIN\fP,
.SM
\fBSIGTTOU\fP,
.SM
\fBSIGTSTP\fP を無視します。
.PP
\fBbash\fP が起動した外部コマンドは、 シェルが自分の親から継承した値をシグナルハンドラに設定します。
ジョブ制御が有効でないときには、非同期コマンドは、 継承したシグナルハンドラに加えて
.SM
\fBSIGINT\fP と
.SM
\fBSIGQUIT\fP も無視します。 コマンド置換の結果として実行されたコマンドは、 キーボードで生成されたジョブ制御シグナルを無視します。
無視されるシグナルは
.SM
\fBSIGTTIN\fP,
.SM
\fBSIGTTOU\fP,
.SM
\fBSIGTSTP\fP です。
.PP
デフォルトでは、シェルは
.SM
\fBSIGHUP\fP を受け取ると終了します。 終了する前には、シェルは実行中・停止中の全てのジョブに対して
\fBSIGHUP\fP を再送信します。停止中のジョブには
.SM
\fBSIGCONT\fP が送られ、このジョブが
.SM
\fBSIGHUP\fP
を受け取るようにします。 特定のジョブに対してシェルからシグナルが送られないようにするためには、 組み込みコマンド \fBdisown\fP (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照) を使って、そのジョブをジョブテーブルから削除するか、あるいは \fBdisown \-h\fP
を使って、
.SM
\fBSIGHUP\fP を受け取らないようにマークを付けます。
.PP
シェルオプションの \fBhuponexit\fP が \fBshopt\fP を使って設定されていた場合、対話的なログインシェルが終了するときに、 \fBbash\fP
は
.SM
\fBSIGHUP\fP を全てのジョブに送ります。
.PP
コマンドの完了を待っている間に、トラップが設定されたシグナルを \fBbash\fP が受け取ったとき、 そのトラップはコマンドが完了するまで実行されません。
\fBbash\fP が組み込みコマンドの \fBwait\fP を使って非同期コマンドを待っているときに、 トラップが設定されているシグナルを受け取ると、
組み込みコマンド \fBwait\fP は即座に復帰させられます。 この際の終了ステータスは 128 より大きい値になります。
また復帰するのはトラップが実行された直後です。
.SH ジョブ制御
\fIジョブ制御 (job control)\fP とは、プロセスの実行を選択的に停止 (\fIサスペンド/suspend\fP) させ、 後で実行を再開させる
(\fIリジューム/resume\fP) 機能のことです。 ユーザは通常、対話的インタフェースを通してこの機能を利用します。
対話的インタフェースは、オペレーティングシステムのカーネルの端末ドライバと \fBbash\fP の組み合わせで提供されます。
.PP
シェルはパイプラインごとに \fIジョブ(job)\fP を構成します。シェルは現在実行中のジョブのテーブルを保存しています。 このテーブルは \fBjobs\fP
コマンドを使ってリスト表示できます。 \fBbash\fP がジョブを非同期的に (\fIバックグラウンド\fP で) 起動したときには、 \fBbash\fP
は以下のような行を出力します:
.RS
.PP
[1] 25647
.RE
.PP
これは、このジョブのジョブ番号は 1 であり、 このジョブを構成するパイプライン中の最後のプロセスの ID が 25647 であることを示しています。
1 つのパイプラインに含まれる全てのプロセスは同じジョブのメンバです。 \fBbash\fP は、ジョブ制御の基礎として \fIジョブ\fP
という抽象化機構を使います。
.PP
ジョブ制御のためのユーザインタフェースの実装を容易にするために オペレーティングシステムは \fI現在の端末プロセスのグループ ID (current
terminal process group ID)\fP という情報を管理しています。 このプロセスグループのメンバ (プロセスグループ ID
が現在の端末プロセスのグループ ID と等しいプロセス) は、
.SM
\fBSIGINT\fP
のような、キーボードで生成されたシグナルを受け取ります。 このようなプロセスは \fIフォアグラウンド (foreground)\fP にあると言われます。
\fIバックグラウンド (background)\fP プロセスは、 プロセスのグループ ID が端末のグループ ID と異なるプロセスです。
このようなプロセスは、キーボードで生成したシグナルの影響を受けません。 フォアグラウンドプロセスだけが端末からの読み込みが許され、 \f(CWstty
tostop\fP で許可されている場合には出力も許されます。 バックグラウンドプロセスが端末からの読み込み (\f(CWstty tostop\fP
が有効なときには端末への書き込みも) を行おうとすると、 このプロセスには端末ドライバから
.SM
\fBSIGTTIN (SIGTTOU)\fP
シグナルが送られます。 このシグナルを捕捉しなければ、プロセスは停止します。
.PP
\fBbash\fP が動作しているオペレーティングシステムがジョブ制御をサポートしているならば、 ユーザは \fBbash\fP を使ってジョブ制御を行えます。
プロセスの動作中に \fIサスペンド\fP 文字 (通常は \fB^Z\fP, Control\-Z) を打ち込むと、そのプロセスは停止させられ、 \fBbash\fP
に制御が戻ります。 \fI遅延サスペンド (delayed suspend)\fP 文字 (通常は \fB^Y\fP, Control\-Y) を打ち込むと、
そのプロセスは端末から入力を読み込もうとしたときに停止させられ、 制御が \fBbash\fP に戻ります。
この時点でユーザはこのジョブの状態を操作できます。 利用できるのは、バックグラウンドで実行を継続するならば \fBbg\fP
コマンド、フォアグラウンドで実行を継続するならば \fBfg\fP コマンド、プロセスを kill するなら \fBkill\fP コマンドです。\fB^Z\fP
の効果は即座に現われるので、 未出力の出力や先行入力した文字が破棄されるという副作用があります。
.PP
シェル上でジョブを参照する方法はいろいろあります。 文字 \fB%\fP はジョブ名 (\fIjobspec\fP) の始まりを示します。 ジョブ番号 \fIn\fP は
\fB%n\fP として参照できます。 ジョブの参照には、 ジョブを起動するときに使った名前の先頭部分や
コマンドライン中に現われる部分文字列を使うこともできます。 例えば、 \fB%ce\fP は停止中のジョブ \fBce\fP を指します。
先頭の部分がマッチするジョブが複数個ある場合には、 \fBbash\fP はエラーを報告します。一方、 \fB%?ce\fP を用いると、文字列 \fBce\fP
をコマンドライン中に含む任意のジョブを参照できます。 部分文字列がマッチするジョブが複数個ある場合には、 \fBbash\fP はエラーを報告します。
シンボル \fB%%\fP および \fB%+\fP は、シェルが覚えている \fIカレントジョブ (current job)\fP
を指します。これは、フォアグラウンドで起動されているときに停止されたか、 バックグラウンドで起動された最後のジョブです。 \fI前のジョブ
(previous job)\fP は \fB%\-\fP を使って参照できます。 ジョブが一つしかない場合には、\fB%+\fP と \fB%\-\fP のどちらも使っても
そのジョブを参照することができます。 ジョブに関する出力 ( \fBjobs\fP コマンドの出力など) では、カレントジョブには必ず \fB+\fP
というフラグが付き、前のジョブには \fB\-\fP というフラグが付きます。 ジョブ名が付いていない単独の % もカレントジョブを示します。
.PP
ジョブの名前だけを指定すると、 そのジョブをフォアグラウンドに持ってきます。つまり、 \fB%1\fP は \fB\*(lqfg %1\*(rq\fP と同義であり、 ジョブ
1 をバックグラウンドからフォアグラウンドに持ってきます。 同様に \fB\*(lq%1 &\*(rq\fP はジョブ 1 をバックグラウンドで実行再開させます。これは
\fB\*(lqbg %1\*(rq\fP と同じ意味です。
.PP
ジョブの状態が変わると、シェルはそれを即座に知ります。 通常、 \fBbash\fP がジョブの状態変化を報告するのは、プロンプトを出力する直前です。
これは他の出力を妨害しないためです。 組み込みコマンド \fBset\fP で \fB\-b\fP オプションが指定されていると、 \fBbash\fP
はジョブの状態の変化を即座に報告します。 子プロセスが終了するたびに
.SM
\fBSIGCHLD\fP のトラップが実行されます。
.PP
ジョブを停止させたままで (\fBcheckjobs\fP シェルオプションが 組み込みコマンド \fBshopt\fP により有効になっているときには実行中でも)
\fBbash\fP を終了 (exit) させようとすると、シェルは警告メッセージを出力します。 \fBcheckjobs\fP
オプションが有効のときには、ジョブとその状態を一覧表示します。 このようなときには、 \fBjobs\fP コマンドを使ってジョブの状態を調べられます。
間にコマンドを挟まずに \fBbash\fP を再び終了させようとすると、 シェルは警告を繰り返さないで、 停止中のジョブを終了させます。
.SH プロンプト
対話的に動作している場合、 \fBbash\fP はコマンドを読む込み準備ができたときにプライマリプロンプト
.SM
\fBPS1\fP
を表示し、コマンドを完成させるためにまだ入力が必要なときに セカンダリプロンプト
.SM
\fBPS2\fP を表示します。 \fBbash\fP
ではこれらのプロンプト文字列をカスタマイズできます。 この際にはバックスラッシュでエスケープされた 各種特殊文字を挿入でき、
これは以下のようにデコードされます:
.RS
.PD 0
.TP
\fB\ea\fP
ASCII のベル文字 (07)
.TP
\fB\ed\fP
"曜日 月 日" という形式の日付 (例: "Tue May 26")
.TP
\fB\eD{\fP\fIformat\fP\fB}\fP
\fIformat\fP が \fIstrftime\fP(3) に渡され、 その結果がプロンプト文字列に挿入されます。 \fIformat\fP が空の場合には
(ブレースは必要)、 ロケールで指定された時刻表記になります。
.TP
\fB\ee\fP
ASCII のエスケープ文字 (033)
.TP
\fB\eh\fP
ホスト名のうち最初の `.' までの部分
.TP
\fB\eH\fP
ホスト名
.TP
\fB\ej\fP
シェルによって現在管理されているジョブの数
.TP
\fB\el\fP
シェルの端末デバイスのベース名 (basename)
.TP
\fB\en\fP
改行 (newline)
.TP
\fB\er\fP
復帰 (carriage return)
.TP
\fB\es\fP
シェルの名前。つまり \fB$0\fP のベース名 (最後のスラッシュ以降の部分)
.TP
\fB\et\fP
24 時間制の HH:MM:SS 形式の現在の時刻
.TP
\fB\eT\fP
12 時間制の HH:MM:SS 形式の現在の時刻
.TP
\fB\e@\fP
12 時間制の am/pm 形式の現在の時刻
.TP
\fB\eA\fP
12 時間制の HH:MM 形式の現在の時刻
.TP
\fB\eu\fP
現在のユーザのユーザ名
.TP
\fB\ev\fP
\fBbash\fP のバージョン (例: 2.00)
.TP
\fB\eV\fP
\fBbash\fP のリリース。バージョンにパッチレベルを加えたもの (例 : 2.00.0)
.TP
\fB\ew\fP
現在の作業ディレクトリ。
.SM
\fB$HOME\fP の部分はチルダに短縮されます。
.SM
\fBPROMPT_DIRTRIM\fP
の値が適用されます。
.TP
\fB\eW\fP
現在の作業ディレクトリのベース名
.SM
\fB$HOME\fP の部分はチルダに短縮されます。
.TP
\fB\e!\fP
このコマンドの履歴番号
.TP
\fB\e#\fP
このコマンドのコマンド番号
.TP
\fB\e$\fP
実効 UID が 0 の場合に \fB#\fP、 それ以外の場合は \fB$\fP
.TP
\fB\e\fP\fInnn\fP
8進数 \fInnn\fP に対応する文字
.TP
\fB\e\e\fP
バックスラッシュ
.TP
\fB\e[\fP
非表示文字のシーケンスの開始。 これを使うと、プロンプト中に端末の制御シーケンスを埋め込むことができます。
.TP
\fB\e]\fP
非表示文字のシーケンスを終了します。
.PD
.RE
.PP
コマンド番号と履歴番号は異なるのが普通です: コマンドの履歴番号とは履歴リスト内での位置です。 履歴リストは履歴ファイルから読み込めます (後述の
.SM
\fB履歴\fP を参照)。 一方、コマンド番号は、 現在のシェルのセッション中に実行された一連のコマンドの列における位置です。
この文字列がデコードされた後、さらにパラメータ展開、コマンド置換、 算術式展開、クォート削除が適用されます。展開はシェルオプション
\fBpromptvars\fP (後述の
.SM
\fBシェルの組み込みコマンド\fP の項にある \fBshopt\fP コマンドの説明を参照)
の値に基づいて行われます。
.SH "READLINE ライブラリ"
readline は対話シェルを使うときに入力の読み込みを処理するライブラリです。 ただし、シェルの起動時に \fB\-\-noediting\fP
オプションが指定された場合には使われません。 行編集は組み込みコマンド \fBread\fP に \fB\-e\fP オプションを 指定したときにも使われます。
デフォルトでは、行編集に使うコマンドは emacs のコマンドに似ています。 vi 形式の行編集インタフェースも使えます。 行編集は、組み込みコマンド
\fBset\fP (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照) に \fB\-o emacs\fP や \fB\-o vi\fP
オプションを指定することで、いつでも有効にできます。 シェルを起動した後に行編集機能を無効にするには、組み込みコマンド \fBset\fP に対して \fB+o
emacs\fP オプションまたは \fB+o vi\fP オプションを設定してください。
.SS "Readline の記法"
.PP
このセクションでは、emacs 形式の記法を使ってキーストロークを表します。 コントロールキーは C\-\fIkey\fP で表します (例: C\-n は
Control\-N の意味です)。同様に \fIメタ\fP キーは M\-\fIkey\fP で表すので、M\-x は Meta\-X を表すことになります。
(\fIメタ\fP キーがないキーボードでは、M\-\fIx\fP は ESC \fIx\fP を表します。つまり、 エスケープキーを押した後に \fIx\fP
キーを押します。これは ESC を \fIメタプレフィックス (meta prefix)\fP にする操作です。 M\-C\-\fIx\fP
の組み合わせは、ESC\-Control\-\fIx\fP つまり、エスケープキーを押した後に、コントロールキーを押したまま \fIx\fP を押すことを意味します。)
.PP
Readline のコマンドには数値の \fI引き数\fP を指定できます。通常これは繰り返しの回数として作用します。
ただし、場合によっては、引き数の符号が意味を持つこともあります。 順方向に作用するコマンド (例: \fBkill\-line\fP) に負の引き数を渡すと、
コマンドは逆方向に作用します。 引き数を指定した場合の動作がこの説明と異なるコマンドについては後で説明します。
.PP
コマンドがテキストを\fIキル (kill)\fP すると説明されているときは、 削除されたテキストは、 後で取り出せる (\fIヤンク (yank)\fP
できる) ように保存されます。 キルされたテキストは、\fIキルリング (kill ring)\fP に保存されます。 連続してキルを行うと、テキストは 1
つのまとまりとして保存されるので、 全部を一度にヤンクできます。テキストをキルしないコマンドが挟まると、 キルリング上のテキストが分離されます。
.SS "Readline の初期化"
.PP
readline をカスタマイズするには、 コマンドを初期化ファイル (\fIinputrc\fP ファイル) に追加します。 このファイルの名前は、変数
.SM
\fBINPUTRC\fP の値から決まります。 この変数が設定されていない場合のデフォルト値は \fI~/.inputrc\fP です。
readline ライブラリを使うプログラムが起動する際には、 この初期化ファイルが読み込まれ、キー割り当てと変数が設定されます。 readline
の初期化ファイル中で使用できる基本的構文は、 以下のように少ししかありません。 空行は無視されます。 \fB#\fP で始まる行はコメントです。 \fB$\fP
で始まる行は条件文です。 それ以外の行はキー割り当てと変数の設定です。
.PP
デフォルトのキー割り当ては \fIinputrc\fP ファイルで変更できます。 このライブラリを使う他のプログラムからも、
独自のコマンドとキー割り当てを追加できます。
.PP
例えば、
.RS
.PP
M\-Control\-u: universal\-argument
.RE
または
.RS
C\-Meta\-u: universal\-argument
.RE
を \fIinputrc\fP ファイルに書くと、M\-C\-u で readline の \fIuniversal\-argument\fP
コマンドが実行されるようになります。
.PP
以下に示すシンボル名を使うことができます: \fIRUBOUT\fP, \fIDEL\fP, \fIESC\fP, \fILFD\fP, \fINEWLINE\fP, \fIRET\fP,
\fIRETURN\fP, \fISPC\fP, \fISPACE\fP, \fITAB\fP。
.PP
readline では、キーにはコマンド名だけでなく文字列を割り当てることもでき、 その場合には、そのキーが押されると割り当てられた文字列が挿入されます
(\fIマクロ\fP)。
.SS "Readline のキー割り当て"
.PP
\fIinputrc\fP ファイルにおける制御キーの割り当て方は単純です。 必要なものは、コマンド名あるいはマクロの文字列と、
これらが割り当てられるキーシーケンスだけです。 名前は 2 通りの方法で指定できます。 つまり、シンボリックなキーの名前 (たいていは、\fIMeta\-\fP
や \fIControl\-\fP プレフィックスと組み合わせて使われる) による指定と、 キーシーケンスによる指定です。
.PP
「\fBkeyname\fP:\^\fIfunction\-name\fP」あるいは 「\fBkeyname\fP:\^\fImacro\fP」の形式を使うときには、
\fIkeyname\fP は英語で書き下したキーの名前となります。例を以下に示します:
.sp
.RS
Control\-u: universal\-argument
.br
Meta\-Rubout: backward\-kill\-word
.br
Control\-o: "> output"
.RE
.LP
この例では、 \fIC\-u\fP が \fBuniversal\-argument\fP に、 \fIM\-DEL\fP が \fBbackward\-kill\-word\fP
に割り当てられます。 また、 \fIC\-o\fP はマクロの実行に割り当てられ、右辺値に展開されます (つまり、テキスト
.if t \f(CW> output\fP
.if n ``> output''
が編集行に挿入されます)。
.PP
後者の形式である「\fB"keyseq"\fP:\^\fIfunction\-name\fP」または 「\fB"keyseq"\fP:\^\fImacro\fP」においては、
\fBkeyseq\fP は先程の \fBkeyname\fP とは異なり、 ダブルクォートで括ってキーシーケンス全体を示す文字列を表記しています。
以下の例で示すように、GNU Emacs 形式のキーエスケープの一部を使えます。 ただしシンボリックな文字名は認識されません。
.sp
.RS
"\eC\-u": universal\-argument
.br
"\eC\-x\eC\-r": re\-read\-init\-file
.br
"\ee[11~": "Function Key 1"
.RE
.PP
この例でも、 \fIC\-u\fP が \fBuniversal\-argument\fP 機能に割り当てられています。 \fIC\-x C\-r\fP は
\fBre\-read\-init\-file\fP 機能に割り当てられ、 \fIESC [ 1 1 ~\fP は
.if t \f(CWFunction Key 1\fP という文字列の挿入に割り当てられています。
.if n ``Function Key 1'' という文字列の挿入に割り当てられています。
.PP
GNU Emacs 形式のエスケープシーケンスを以下に全て示します:
.RS
.PD 0
.TP
\fB\eC\-\fP
コントロールプレフィックス
.TP
\fB\eM\-\fP
メタプレフィックス
.TP
\fB\ee\fP
エスケープ文字
.TP
\fB\e\e\fP
バックスラッシュ
.TP
\fB\e"\fP
" という文字
.TP
\fB\e\(aq\fP
\(aq という文字
.RE
.PD
.PP
GNU Emacs 形式のエスケープシーケンスに加えて、 別形式のバックスラッシュエスケープも使えます:
.RS
.PD 0
.TP
\fB\ea\fP
警告 (ベル)
.TP
\fB\eb\fP
バックスペース
.TP
\fB\ed\fP
削除 (delete)
.TP
\fB\ef\fP
フォームフィード
.TP
\fB\en\fP
改行 (newline)
.TP
\fB\er\fP
復帰 (carriage return)
.TP
\fB\et\fP
水平タブ
.TP
\fB\ev\fP
垂直タブ
.TP
\fB\e\fP\fInnn\fP
8 進値が \fInnn\fP である 8 ビット文字 (1 文字につき数字 1〜3 桁)
.TP
\fB\ex\fP\fIHH\fP
16 進値が \fIHH\fP である 8 ビット文字 (16 進で 1〜2 桁)。
.RE
.PD
.PP
マクロのテキストを入力する際には、マクロ定義を示すために シングルクォートやダブルクォートを使わなければなりません。
クォートされていないテキストは関数名とみなされます。 マクロ本体では、前述のバックスラッシュによるエスケープは展開されます。
バックスラッシュはマクロのテキスト内の他の文字を全てエスケープします。 これには " や \(aq も含まれます。
.PP
\fBbash\fP では、組み込みコマンドの \fBbind\fP を使って、readline の現在の キー割り当ての表示と変更を行えます。
また、組み込みコマンド \fBset\fP に対して \fB\-o\fP オプションを使えば、編集モードを対話的利用の途中に切り替え可能です (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照)。
.SS "Readline の変数"
.PP
Readline には、動作を細かくカスタマイズするために変数があります。 変数は \fIinputrc\fP ファイル中に
.RS
.PP
\fBset\fP \fIvariable\-name\fP \fIvalue\fP
.RE
.PP
という形式の文で設定できます。 特に断らない限り、readline の変数がとる値は \fBOn\fP か \fBOff\fP
のいずれかです。大文字と小文字の違いは考慮しません。 認識できない変数名は無視されます。
変数の値を読み取るとき、設定されてない場合や、空文字列、"on" (大文字と小文字は区別しない)、"1" は \fBOn\fP とみなされます。それ以外の値は
\fBOff\fP とみなされます。 変数とそのデフォルト値を以下に示します:
.PP
.PD 0
.TP
\fBbell\-style (audible)\fP
readline が端末のベルを鳴らそうとしたときの動作を制御します。 \fBnone\fP が設定されている場合は、readline はベルを鳴らしません。
\fBvisible\fP が設定されている場合には、可能であれば可視ベル (visible bell) が用いられます。\fBaudible\fP
が設定されている場合には、 readline は端末のベルを鳴らそうとします。
.TP
\fBbind\-tty\-special\-chars (On)\fP
\fBOn\fP が設定されていると、 カーネルの端末ドライバによって特別扱いされるコントロール文字の機能の代わりに readline
の同等の機能を割り当てようとします。
.TP
\fBcomment\-begin (\*(lq#\*(rq)\fP
readline の \fBinsert\-comment\fP コマンドが実行されたときに挿入される文字列です。 このコマンドは emacs モードでは
\fBM\-#\fP に割り当てられ、vi コマンドモードでは \fB#\fP に割り当てられます。
.TP
\fBcompletion\-ignore\-case (Off)\fP
\fBOn\fP が設定されていると、 readline がファイル名のマッチングと補完を行う際に 大文字と小文字が区別されません。
.TP
\fBcompletion\-prefix\-display\-length (0)\fP
補完候補のリストでそのまま表示される共通先頭部分の文字数。 0 より大きい値が設定されると、補完候補を表示するときに、
この値より長い共通先頭部分は省略記号で置き換えられます
.TP
\fBcompletion\-query\-items (100)\fP
\fBpossible\-completions\fP コマンドが生成した補完候補の数が、 いくつを越えると表示の可否をユーザに問い合わせるのかを決めます。
この変数には 0 以上の任意の整数を設定できます。 補完の候補数がこの変数の値以上の場合には、
ユーザに対して候補を表示するかどうかの問い合わせがなされます。 そうでない場合には、単に端末に補完の候補がリスト表示されます。
.TP
\fBconvert\-meta (On)\fP
\fBOn\fP を設定すると、readline は 8 番目のビットがセットされている文字を ASCII のキーシーケンスに変換します。 変換は、8
番目のビットを落として、 エスケープ文字を前に追加することによって行います (実際にはエスケープ文字を\fIメタプレフィックス\fPとして用います)。
.TP
\fBdisable\-completion (Off)\fP
\fBOn\fP を設定すると、readline は単語の補完を行わなくなります。 補完される文字の編集行への挿入は、 その文字を
\fBself\-insert\fP に割り当てたかのように行われます。
.TP
\fBediting\-mode (emacs)\fP
readline の起動時に \fIemacs\fP と \fIvi\fP のどちらに似たキー割り当てを使うのかを制御します。 \fBediting\-mode\fP には
\fBemacs\fP と \fBvi\fP のいずれかを指定できます。
.TP
\fBecho\-control\-characters (On)\fP
\fBOn\fP が設定されていると、サポートしている OS では、 キーボード操作でシグナルが起こされたときに相当する文字を画面に出力します。
.TP
\fBenable\-keypad (Off)\fP
\fBOn\fP を設定すると、 readline は呼び出されたときにアプリケーションキーパッドを有効にしようとします。
一部のシステムでは、矢印キーを使うためにこれを有効にする必要があります。
.TP
\fBenable\-meta\-key (On)\fP
\fBOn\fP が設定されていると、 readline は端末がサポートを要求するメタ修飾キーを有効にしようとします。 多くの端末では、メタキーは 8
ビット文字を送信するのに使われます。
.TP
\fBexpand\-tilde (Off)\fP
\fBOn\fP を設定すると、 readline が単語の補完を試みるときにチルダ展開が行われます。
.TP
\fBhistory\-preserve\-point (Off)\fP
\fBOn\fP が設定されていると、 \fBprevious\-history\fP や \fBnext\-history\fP で履歴行を取り出したときに、
ポイントを行内の同じ位置に置こうとします。
.TP
\fBhistory\-size (0)\fP
履歴リストに保存する履歴エントリの最大数を設定する。 0 が設定されていると、履歴リストのエントリの数は制限されません。
.TP
\fBhorizontal\-scroll\-mode (Off)\fP
\fBOn\fP が設定されていると、readline は表示の際に 1 行しか 使わないようになります。つまり、行がスクリーンの幅より長くなると、
新しい行に折り返すのではなく、1 つの入力行の中で横にスクロールします。
.TP
\fBinput\-meta (Off)\fP
\fBOn\fP が設定されていると、readline は 8 ビットの入力が可能になりま
す(つまり、読み込んだ文字の再上位ビットを落としません)。この動作は、端 末のサポートとは無関係に行われます。 \fBmeta\-flag\fP
という名前は、この変数の別名です。
.TP
\fBisearch\-terminators (\*(lqC\-[C\-J\*(rq)\fP
インクリメンタル検索を終了させる文字からなる文字列です (終了後にその文字がコマンドとして実行されることもありません)。
この変数に値が設定されていなければ、 \fIESC\fP と \fIC\-J\fP でインクリメンタル検索が終わります。
.TP
\fBkeymap (emacs)\fP
現在の readline のキーマップを設定します。 有効なキーマップ名は、 \fIemacs, emacs\-standard, emacs\-meta,
emacs\-ctlx, vi, vi\-command\fP, .IR vi\-insert です。\fIvi\fP は \fIvi\-command\fP
と等価で、\fIemacs\fP は \fIemacs\-standard\fP と等価です。 デフォルト値は \fIemacs\fP です。
\fBediting\-mode\fP の値もデフォルトキーマップに影響を与えます。
.TP
\fBmark\-directories (On)\fP
\fBOn\fP が設定されていると、 補完されたディレクトリ名の末尾にスラッシュが追加されます。
.TP
\fBmark\-modified\-lines (Off)\fP
\fBOn\fP が設定されていると、履歴行を表示する際に、 以前に変更されたものの先頭にアスタリスク (\fB*\fP) を付けて表示します。
.TP
\fBmark\-symlinked\-directories (Off)\fP
\fBOn\fP が設定されていると、 ディレクトリへのシンボリックリンクが補完されたときに、 (\fBmark\-directories\fP が有効であれば)
名前の末尾にスラッシュが追加されます。
.TP
\fBmatch\-hidden\-files (On)\fP
\fBOn\fP が設定されていると、 ファイル名の補完で `.' で始まる名前のファイル (隠しファイル) にもマッチします。 \fBOff\fP
が設定されているときには、`.' で始まる名前のファイルを 補完するには先頭の `.' をユーザが入力する必要があります。
.TP
\fBmenu\-complete\-display\-prefix (Off)\fP
\fBOn\fP が設定されていると、 メニュー補完 (menu completion) で補完候補のリスト (空の場合も含む)
を順番に表示する前に、共通先頭部分を表示します。
.TP
\fBoutput\-meta (Off)\fP
\fBOn\fP が設定されていると、 readline は 8 番目のビットが立っている文字を直接表示します。
メタ文字を前置したエスケープシーケンスでの表示は行いません。
.TP
\fBpage\-completions (On)\fP
\fBOn\fP が設定されていると、 一度に一画面分の補完候補を表示するために readline は組み込みの \fImore\fP 風ページャを使います。
.TP
\fBprint\-completions\-horizontally (Off)\fP
\fBOn\fP が設定されていると、 readline は補完でマッチするものをアルファベット順にして、 縦方向ではなく横方向に並べて表示します。
.TP
\fBrevert\-all\-at\-newline (Off)\fP
\fBOn\fP が設定されていると、 \fBaccept\-line\fP が実行されて readline から戻るときに、
履歴に加えられた全ての変更を元に戻します。 デフォルトでは、\fBreadline\fP の各呼び出しを通じて
履歴行が変更され単一のアンドゥリストが保持されます。
.TP
\fBshow\-all\-if\-ambiguous (Off)\fP
これは補完機能のデフォルトの挙動を変えます。 \fBOn\fP が設定されている場合、単語に対する補完候補が複数個あると、
ベルは鳴らされずに、マッチするものが即座にリスト表示されます。
.TP
\fBshow\-all\-if\-unmodified (Off)\fP
これは \fBshow\-all\-if\-ambiguous\fP と同様に 補完機能のデフォルトの挙動を変えます。 \fBOn\fP
が設定されている場合、単語に対する補完候補が複数個あって、 部分的な補完ができない (補完候補が共通先頭部分を持たない) と、
マッチするものが即座にリスト表示されます。 ベルは鳴らされません。
.TP
\fBskip\-completed\-text (Off)\fP
\fBOn\fP が設定されていると、 これは補完機能がマッチしたものを行に挿入するときのデフォルトの挙動を変えます。
単語の途中で補完を実行したときにだけ意味があります。 有効になっていると、readline は、単語のカーソル以後の部分が重複しないように、
補完された単語のうちポイント以後の文字を挿入しません。
.TP
\fBvisible\-stats (Off)\fP
\fBOn\fP が設定されていると、 \fIstat\fP(2) で得られるファイルの種類を表す文字が、 補完候補のリスト表示の際に追加されます。
.PD
.SS "Readline の条件構文"
.PP
Readline には、 C 言語のプリプロセッサの条件付きコンパイル機能と 似たコンセプトに基づく機能が実装されています。
これを使うと、条件に応じてキー割り当てや変数の設定を実行できます。 パーザディレクティブは 4 つあります。
.IP \fB$if\fP
\fB$if\fP 構文を使うと、編集モードや使用中の端末、 readline を使っているアプリケーションに応じた割り当てを行えます。
行末までの全テキストが評価対象となります。 これを分離するには文字は必要ありません。
.RS
.IP \fBmode\fP
\fB$if\fP ディレクティブの \fBmode=\fP 形式は、 readline が emacs モードか vi
モードのどちらになっているかを調べるために使います。 例えば、これを \fBset keymap\fP コマンドと一緒に使い、 readline が
emacs モードで始まったときだけ キーの割り当てを \fIemacs\-standard\fP や \fIemacs\-ctlx\fP キーマップに設定できます。
.IP \fBterm\fP
\fBterm=\fP 形式を使うと、 端末固有のキー割り当てを入れることができます。 これは端末のファンクションキーが出力する
キーシーケンスを割り当てる場合などに使えます。 \fB=\fP の右辺の単語の評価は、 端末の完全な名前および最初の \fB\-\fP
の前までの部分的な名前の両方に対して行われます。 例えば、 \fIsun\fP は \fIsun\fP と \fIsun\-cmd\fP の両方にマッチします。
.IP \fBapplication\fP
\fBapplication\fP はアプリケーション固有の設定を入れるために使います。 readline ライブラリを使っているプログラムはそれぞれ
\fIアプリケーション名 (application name)\fP を設定するので、 初期化ファイルはそれが特定の値かどうかを調べられます。
これを使って、特定のプログラム用で便利な機能に キーシーケンスを割り当てできます。例えば、以下のコマンドは、 \fBbash\fP
の場合に、現在の単語または直前の単語をクォートする キーシーケンスを追加します。
.sp 1
.RS
.nf
\fB$if\fP Bash
# Quote the current or previous word
"\eC\-xq": "\eeb\e"\eef\e""
\fB$endif\fP
.fi
.RE
.RE
.IP \fB$endif\fP
このコマンドは \fB$if\fP コマンドを終了させます (上記の例の通り)。
.IP \fB$else\fP
\fB$if\fP ディレクティブのこの分岐内に書かれたコマンドは、 評価が失敗したときに実行されます。
.IP \fB$include\fP
このディレクティブはファイル名 1 つを引き数に取り、 そのファイルからコマンドとキー割り当てを読み込みます。 例えば以下のディレクティブを使うと
\fI/etc/inputrc\fP が読み込まれます:
.sp 1
.RS
.nf
\fB$include\fP \^ \fI/etc/inputrc\fP
.fi
.RE
.SS 検索
.PP
readline には、指定した文字列を含む行をコマンド履歴内から探すコマンド が用意されています (後述の
.SM
\fB履歴\fP を参照)。
検索のモードには、 \fIインクリメンタル (incremental)\fP モードと \fI非インクリメンタル (non\-incremental)\fP モードの
2 つがあります。
.PP
インクリメンタル検索では、 ユーザが検索文字列全体の入力が終わるより前に検索が開始されます。 検索文字列に文字が追加されるたびに、 readline
はそれまでに入力した文字列にマッチする履歴から 次のエントリを表示します。 インクリメンタル検索では、探している履歴エントリを見つけるために
必要な数の文字を入力すれば十分です。 \fBisearch\-terminators\fP の値に含まれる文字を入力すると、 インクリメンタル検索は終了します。
この変数に値が代入されていない場合には、エスケープ文字または Control\-J でインクリメンタル検索が終了します。 Control\-G
はインクリメンタル検索を異常終了させ、元の行を復元します。 検索が終了すると、検索文字列を含む履歴エントリが現在の行になります。
.PP
マッチした他の履歴リストのエントリを見つけるには、Control\-S または Control\-R を適宜入力します。これにより、
今まで入力した検索文字列にマッチする次のエントリを 履歴の前方または後方に向かって探します。 readline
に割り当てられた他のキーシーケンスを入力すると検索が終わり、 入力したキーシーケンスに対応するコマンドが実行されます。
例えば、\fI改行\fPは検索を終了させて、その行を入力します。 これにより、履歴リスト中のコマンドが実行されます。
.PP
readline は前回のインクリメンタル検索で入力された 検索文字列を覚えています。 新しい検索文字を間に挟まずに Control\-R を 2
回入力すると、 覚えている検索文字列が使われます。
.PP
インクリメンタルでない検索の場合には、検索文字列全体を読み込んでから、 履歴行にマッチするものの検索を始めます。
検索文字列には、ユーザが入力したものか、現在の行の内容の一部が使えます。
.SS "Readline のコマンド名"
.PP
以下は、 コマンドの名前およびそれらが割り当てられている デフォルトのキーシーケンスの一覧です。 対応するキーシーケンスがないコマンド名には、
デフォルトではキーは割り当てられていません。 以下の説明では、\fIポイント (point)\fP は現在のカーソルの位置を表し、 \fIマーク (mark)\fP
は \fBset\-mark\fP コマンドによって保存されたカーソル位置を表します。 ポイントとマークの間のテキストは、\fIリージョン (region)\fP
と呼びます。
.SS 移動コマンド
.PP
.PD 0
.TP
\fBbeginning\-of\-line (C\-a)\fP
現在の行の先頭に移動します。
.TP
\fBend\-of\-line (C\-e)\fP
行の末尾に移動します。
.TP
\fBforward\-char (C\-f)\fP
1 文字進みます。
.TP
\fBbackward\-char (C\-b)\fP
1 文字戻ります。
.TP
\fBforward\-word (M\-f)\fP
次の単語の最後に進みます。単語は英数字 (英字と数字) からなります。
.TP
\fBbackward\-word (M\-b)\fP
現在あるいは直前の単語の先頭に戻ります。 単語は英数字 (英字と数字) からなります。
.TP
\fBshell\-forward\-word\fP
次の単語の最後に進みます。 単語はクォートされていないシェルのメタ文字で区切られます。
.TP
\fBshell\-backward\-word\fP
現在の単語あるいは前の単語の先頭に戻ります。 単語はクォートされていないシェルのメタ文字で区切られます。
.TP
\fBclear\-screen (C\-l)\fP
現在の行を画面の一番上の行に残したまま、画面をクリアします。 引き数を付けると、画面をクリアせずに現在の行を再描画します。
.TP
\fBredraw\-current\-line\fP
現在の行を再描画します。
.PD
.SS 履歴操作のためのコマンド
.PP
.PD 0
.TP
\fBaccept\-line (Newline, Return)\fP
カーソルの位置に関わらず、行を確定します。この行が空でなければ、変数
.SM
\fBHISTCONTROL\fP
の状態に従って、これが履歴リストに追加されます。 行が履歴リストを変更したものならば、履歴行は元の状態に戻されます。
.TP
\fBprevious\-history (C\-p)\fP
履歴リストを戻り、履歴リストから前の行を取り出します。
.TP
\fBnext\-history (C\-n)\fP
履歴リストを進み、履歴リストから次の行を取り出します。
.TP
\fBbeginning\-of\-history (M\-<)\fP
履歴の最初の行に移動します。
.TP
\fBend\-of\-history (M\->)\fP
入力履歴の最後に移動します。つまり、現在入力中の行に移動します。
.TP
\fBreverse\-search\-history (C\-r)\fP
現在の行を開始点にして後方に向かって検索を行い、 必要に応じて履歴を「遡って」いきます。これはインクリメンタル検索です。
.TP
\fBforward\-search\-history (C\-s)\fP
現在の行を開始点にして前方に向かって検索を行い、 必要に応じて履歴を「下って」いきます。これはインクリメンタル検索です。
.TP
\fBnon\-incremental\-reverse\-search\-history (M\-p)\fP
現在の行を開始点にして、履歴リストを後方に向かって検索を行います。 ユーザが入力した文字列を非インクリメンタルモードで検索します。
.TP
\fBnon\-incremental\-forward\-search\-history (M\-n)\fP
現在の行を開始点にして、履歴リストを前方に向かって検索を行います。 ユーザが入力した文字列を非インクリメンタルモードで検索します。
.TP
\fBhistory\-search\-forward\fP
履歴を前方に向かって検索し、 現在の行の先頭とポイントの間の文字列を探します。 これは非インクリメンタル検索です。
.TP
\fBhistory\-search\-backward\fP
履歴を後方に向かって検索し、 現在の行の先頭およびポイントの間の文字列を探します。 これは非インクリメンタル検索です。
.TP
\fByank\-nth\-arg (M\-C\-y)\fP
前のコマンドに対する最初の引き数 (通常は前の行の 2 番目の単語) をポイントに挿入します。引き数 \fIn\fP が付いていると、前のコマンドの
\fIn\fP 番目の単語 (前のコマンドの単語は 0 から数えます)。 引き数が負ならば、前のコマンドの最後から \fIn\fP 番目の単語が挿入されます。
引き数 \fIn\fP が一度決まると、コマンドの引き数が履歴の展開での "!\fIn\fP" の指定のように展開されます。
.TP
\fByank\-last\-arg (M\-.\^, M\-_\^)\fP
前のコマンドの最後の引き数 (一つ前の履歴エントリの最後の単語) を挿入します。 引き数があると、\fByank\-nth\-arg\fP
と全く同じように動作します。 \fByank\-last\-arg\fP を繰り返して呼び出すと、 履歴リストを遡って参照が行われ、
それぞれの行の最後の引き数が順番に挿入されます。 繰り返して呼び出すときの引き数は、履歴の中を動く方向を決めます。 負の引き数は、履歴の中を動く方向
(後方または前方) を反転します。 履歴の展開での "!$" の指定のように、 最後の引き数の展開に履歴の展開の機能が使われます。
.TP
\fBshell\-expand\-line (M\-C\-e)\fP
シェルが行うのと同じように行の展開を行います。 エイリアスや履歴の展開を含め、シェルの行う全ての単語展開が行われます。
履歴の展開の説明については、後述の
.SM
\fB履歴の展開\fP を参照してください。
.TP
\fBhistory\-expand\-line (M\-^)\fP
現在の行で履歴の展開を行います。 履歴の展開の説明については、後述の
.SM
\fB履歴の展開\fP を参照してください。
.TP
\fBmagic\-space\fP
現在の行で履歴の展開を行い、空白を挿入します。 履歴の展開の説明については、後述の
.SM
\fB履歴の展開\fP を参照してください。
.TP
\fBalias\-expand\-line\fP
現在の行でエイリアスの展開を行います。 エイリアスの展開の説明については、前述の
.SM
\fBエイリアス\fP を参照してください。
.TP
\fBhistory\-and\-alias\-expand\-line\fP
現在の行で履歴とエイリアスの展開を行います。
.TP
\fBinsert\-last\-argument (M\-.\^, M\-_\^)\fP
\fByank\-last\-arg\fP と同じものです。
.TP
\fBoperate\-and\-get\-next (C\-o)\fP
現在の行を実行し、 履歴内の現在の行の次の行を編集用に取得します。 引き数は全て無視されます。
.TP
\fBedit\-and\-execute\-command (C\-xC\-e)\fP
エディタを起動して現在のコマンドラインの内容を開き、 その結果をシェルのコマンドとして実行します。 \fBbash\fP はエディタとして
.SM
\fB$VISUAL\fP,
.SM
\fB$EDITOR\fP, \fIemacs\fP の順で起動を試みます。
.PD
.SS テキスト編集のためのコマンド
.PP
.PD 0
.TP
\fBdelete\-char (C\-d)\fP
ポイントの文字を削除します。 ポイントが行の先頭であり、その行に文字がなく、 さらに打ち込んだ最後の文字が \fBdelete\-char\fP
に割り当てられていなければ、
.SM
\fBEOF\fP が返されます。
.TP
\fBbackward\-delete\-char (Rubout)\fP
カーソルの前の文字を削除します。数値の引き数を与えると、 削除したテキストをキルリングに保存します。
.TP
\fBforward\-backward\-delete\-char\fP
カーソルが行末になければカーソルがある位置の文字を削除します。 カーソルが行末にある場合には、カーソルの前の文字を削除します。
.TP
\fBquoted\-insert (C\-q, C\-v)\fP
次に打ち込んだ文字をそのまま行に追加します。 これは \fBC\-q\fP 等の文字を挿入するために使います。
.TP
\fBtab\-insert (C\-v TAB)\fP
タブ文字を挿入します。
.TP
\fBself\-insert (a,\ b,\ A,\ 1,\ !,\ ...)\fP
打ち込んだ文字を挿入します。
.TP
\fBtranspose\-chars (C\-t)\fP
ポイントの前にある文字を動かし、 現在ポイントがある文字の後ろに持っていきます。 同時にポイントも前に進みます。ポイントが行の最後にある場合は、
ポイントの前の 2 文字が交換されます。 負の引き数を指定すると、何も起こりません。
.TP
\fBtranspose\-words (M\-t)\fP
ポイントの前にある単語を動かし、 ポイントの後ろにある単語の後ろに持っていきます。 この際には、ポイントも始めに前にあった単語の後ろまで移動します。
ポイントが行の最後にある場合は、行の最後の 2 単語が交換されます。
.TP
\fBupcase\-word (M\-u)\fP
現在の (または後ろの) 単語を大文字にします。 負の引き数を指定すると、前の単語を大文字にしますが、 ポイントは動きません。
.TP
\fBdowncase\-word (M\-l)\fP
現在の (または後ろの) 単語を小文字にします。 負の引き数を指定すると、前の単語を小文字にしますが、 ポイントは動きません。
.TP
\fBcapitalize\-word (M\-c)\fP
現在の (または後ろの) 単語をキャピタライズします (単語の先頭の文字を大文字にします)。 負の引き数を指定すると前の単語をキャピタライズしますが、
ポイントは動きません。
.TP
\fBoverwrite\-mode\fP
上書きモードをトグルさせます。 正の引き数を指定すると上書きモードに切り替えます。 負の引き数を指定すると挿入モードに切り替えます。 このコマンドは
\fBemacs\fP モードでのみ有効です。 \fBvi\fP モードでは違った形で上書きします。 \fIreadline()\fP
を呼び出したときは毎回、挿入モードで始まります。 上書きモードでは、\fBself\-insert\fP が割り当てられた文字は、
ポイントの位置のテキストを右に押し出すのではなく置き換えます。 \fBbackward\-delete\-char\fP が割り当てられた文字は、
ポイントの前の文字をスペースで置き換えます。 このコマンドはデフォルトではキーに割り当てられていません。
.PD
.SS キルとヤンク
.PP
.PD 0
.TP
\fBkill\-line (C\-k)\fP
ポイントから行末までのテキストをキルします。
.TP
\fBbackward\-kill\-line (C\-x Rubout)\fP
現在のカーソル位置から行頭までをキルします。
.TP
\fBunix\-line\-discard (C\-u)\fP
.\" There is no real difference between this and backward-kill-line
ポイントから行頭までをキルします。 キルされたテキストはキルリング (kill\-ring) に入ります。
.TP
\fBkill\-whole\-line\fP
現在の行の文字を全てキルします。ポイントの位置は関係ありません。
.TP
\fBkill\-word (M\-d)\fP
ポイントから現在の単語の終わりまでをキルします。 ポイントが単語と単語の間であれば、後ろの単語の終わりまでをキルします。 単語の境界は
\fBforward\-word\fP で使われているものと同じです。
.TP
\fBbackward\-kill\-word (M\-Rubout)\fP
ポイントの前にある単語をキルします。 単語の境界は \fBbackward\-word\fP で使われているものと同じです。
.TP
\fBshell\-kill\-word (M\-d)\fP
ポイントから現在の単語の終わりまでをキルします。 ポイントが単語と単語の間であれば、後ろの単語の終わりまでをキルします。 単語の境界は
\fBshell\-forward\-word\fP で使われているものと同じです。
.TP
\fBshell\-backward\-kill\-word (M\-Rubout)\fP
ポイントの前にある単語をキルします。 単語の境界は \fBshell\-backward\-word\fP で使われているものと同じです。
.TP
\fBunix\-word\-rubout (C\-w)\fP
ポイントの前にある単語をキルします。 その際には空白を単語の境界として用います。 キルされたテキストはキルリングに入ります。
.TP
\fBunix\-filename\-rubout\fP
ポイントの前にある単語をキルします。 その際には空白とスラッシュを単語の境界として用います。 キルされたテキストはキルリングに入ります。
.TP
\fBdelete\-horizontal\-space (M\-\e)\fP
ポイントの周りの空白とタブを全て削除します。
.TP
\fBkill\-region\fP
現在のリージョン中のテキストをキルします。
.TP
\fBcopy\-region\-as\-kill\fP
リージョン中のテキストをキルバッファにコピーします。
.TP
\fBcopy\-backward\-word\fP
ポイントの前の単語をキルバッファにコピーします。単語の境界は \fBbackward\-word\fP と同じです。
.TP
\fBcopy\-forward\-word\fP
ポイントの後ろの単語をキルバッファにコピーします。単語の境界は \fBforward\-word\fP と同じです。
.TP
\fByank (C\-y)\fP
キルリングの先頭のテキストをバッファ中のポイントにヤンクします。
.TP
\fByank\-pop (M\-y)\fP
キルリングの順番を 1 つ移動し、新たに先頭になったテキストをヤンクします。 \fByank\fP または \fByank\-pop\fP の後にしか使えません。
.PD
.SS 数値の引き数
.PP
.PD 0
.TP
\fBdigit\-argument (M\-0, M\-1, ..., M\-\-)\fP
すでに入力された引き数にこの数字を追加するか、 またはこの数字によって新しい引き数を始めます。 M\-\- を使うと、負の値を指定できます。
.TP
\fBuniversal\-argument\fP
引き数を指定する別の方法です。 このコマンドに続けて 1 つ以上の数字が入力された場合 (頭にマイナス記号を付けることもできます)、
これらの数字で引き数が定義されます。 このコマンドの後に数字が続いた場合、 \fBuniversal\-argument\fP
を再び実行すると数値の引き数を終了しますが、 そうでない場合は無視されます。 特殊なケースとして、
このコマンドの直後に数字でもマイナス記号でもない文字がある場合には、 次のコマンドに対する引き数カウントが 4 倍になります。 引き数カウントは最初は
1 なので、 この機能を一度実行すると引き数カウントは 4 になり、 もう一度実行すると引き数カウントは 16 になります。 それ以降も同様です。
.PD
.SS 補完
.PP
.PD 0
.TP
\fBcomplete (TAB)\fP
ポイントの前のテキストについて補完を試みます。 \fBbash\fP が補完を行う際には、 変数 (テキストが \fB$\fP で始まる場合)、 ユーザ名
(テキストが \fB~\fP で始まる場合)、 ホスト名 (テキストが \fB@\fP で始まる場合)、 コマンド (エイリアスや関数も含みます)
の順序でマッチを行います。 いずれにもマッチしない場合には、 ファイル名補完を試みます。
.TP
\fBpossible\-completions (M\-?)\fP
ポイントの前のテキストの補完候補を列挙します。
.TP
\fBinsert\-completions (M\-*)\fP
ポイントの前のテキストを補完して得られるものを全て挿入します。 挿入されるものは、\fBpossible\-completions\fP
で列挙されるものと同じです。
.TP
\fBmenu\-complete\fP
\fBcomplete\fP コマンドに似ていますが、 補完される単語を補完候補リストのうちの 1 つと置換します。 \fBmenu\-complete\fP
を繰り返して実行すると、 補完候補のリストが次々と順番に挿入されます。 補完リストの最後まで来るとベルが (\fBbell\-style\fP
の設定に基づいて) 鳴らされ、元のテキストに戻ります。 引き数 \fIn\fP を指定すると、リスト中の位置が \fIn\fP 個進みます。
負の引き数を指定すると、リスト中を逆向きに戻れます。 このコマンドは \fBTAB\fP に割り当てることを意図して用意されたものですが、
デフォルトでは割り当ては行われていません。
.TP
\fBmenu\-complete\-backward\fP
\fBmenu\-complete\fP コマンドに似ていますが、 \fBmenu\-complete\fP に負の引き数を与えたときのように、
補完候補のリストを逆向きに進みます。 このコマンドはデフォルトではキーに割り当てられていません。
.TP
\fBdelete\-char\-or\-list\fP
カーソルが行頭や行末に無ければ、カーソルの下の文字を削除します (\fBdelete\-char\fP と同様です)。 カーソルが行末にある場合は、
\fBpossible\-completions\fP と同じ動作をします。 このコマンドはデフォルトではキーに割り当てられていません。
.TP
\fBcomplete\-filename (M\-/)\fP
ポイントの前のテキストについてファイル名の補完を試みます。
.TP
\fBpossible\-filename\-completions (C\-x /)\fP
ポイントの前のテキストについて補完候補を列挙します。 テキストはファイル名として扱われます。
.TP
\fBcomplete\-username (M\-~)\fP
ポイントの前のテキストについて補完を試みます。 テキストはユーザ名として扱われます。
.TP
\fBpossible\-username\-completions (C\-x ~)\fP
ポイントの前のテキストについて補完候補を列挙します。 テキストはユーザ名として扱われます。
.TP
\fBcomplete\-variable (M\-$)\fP
ポイントの前のテキストについて補完を試みます。 テキストはシェル変数として扱われます。
.TP
\fBpossible\-variable\-completions (C\-x $)\fP
ポイントの前のテキストについて補完候補を列挙します。 テキストはシェル変数として扱われます。
.TP
\fBcomplete\-hostname (M\-@)\fP
ポイントの前のテキストについて補完を試みます。 テキストはホスト名として扱います。
.TP
\fBpossible\-hostname\-completions (C\-x @)\fP
ポイントの前のテキストについて補完候補を列挙します。 テキストはホスト名として扱います。
.TP
\fBcomplete\-command (M\-!)\fP
ポイントの前のテキストについて補完を試みます。 テキストはコマンド名として扱います。 コマンド補完の際にマッチングを試みる順序は、
エイリアス、予約語、シェル関数、シェルの組み込みコマンド、 実行ファイルです。
.TP
\fBpossible\-command\-completions (C\-x !)\fP
ポイントの前のテキストについて補完候補を列挙します。 テキストはコマンド名として扱います。
.TP
\fBdynamic\-complete\-history (M\-TAB)\fP
ポイントの前のテキストについて補完を試みます。 履歴リストの各行に対してテキストの比較が行われ、 マッチしたものが補完の候補となります。
.TP
\fBdabbrev\-expand\fP
ポイントの前のテキストについてメニュー補完を試みます。 履歴リストの各行に対してテキストの比較が行われ、 マッチしたものが補完の候補となります。
.TP
\fBcomplete\-into\-braces (M\-{)\fP
ファイル名補完を実行し、補完候補のリストを挿入します。 シェルから利用可能なリストとなるように、 返される候補はブレースで括られます (前述の
\fBブレース展開\fP を参照)。
.PD
.SS キーボードマクロ
.PP
.PD 0
.TP
\fBstart\-kbd\-macro (C\-x (\^)\fP
現在のキーボードマクロに対して入力される文字列の保存を開始します。
.TP
\fBend\-kbd\-macro (C\-x )\^)\fP
現在のキーボードマクロに対して入力された文字列の保存を終了し、 その定義を格納します。
.TP
\fBcall\-last\-kbd\-macro (C\-x e)\fP
最後に定義されたキーボードマクロを再実行します。 マクロ内の各文字があたかもキーボードから入力されたかのように出力されます。
.PD
.SS その他
.PP
.PD 0
.TP
\fBre\-read\-init\-file (C\-x C\-r)\fP
\fIinputrc\fP ファイルの内容を読み込み、 このファイル中の割り当てや変数設定を取り込みます。
.TP
\fBabort (C\-g)\fP
現在の編集行を捨て、端末のベルを鳴らします (動作は \fBbell\-style\fP の設定に従います)。
.TP
\fBdo\-uppercase\-version (M\-a, M\-b, M\-\fP\fIx\fP\fB, ...)\fP
メタ文字と共に入力された文字 \fIx\fP が小文字であれば、 \fIx\fP に対応する大文字に割り当てられているコマンドを実行します。
.TP
\fBprefix\-meta (ESC)\fP
次に入力される文字を、 メタ文字と共に入力されたことにします。
.SM
\fBESC\fP \fBf\fP は \fBMeta\-f\fP と同じ意味です。
.TP
\fBundo (C\-_, C\-x C\-u)\fP
インクリメンタルアンドゥを行います。 履歴は行ごとに別々に記憶されています。
.TP
\fBrevert\-line (M\-r)\fP
この行に対して行った変更を全て取り消します。 このコマンドは、行が初期状態に戻るまで \fBundo\fP コマンドを実行するようなものです。
.TP
\fBtilde\-expand (M\-&)\fP
現在の単語についてチルダ展開を実行します。
.TP
\fBset\-mark (C\-@, M\-<space>)\fP
ポイントにマークを設定します。 数字の引き数が与えられた場合には、 マークはその位置に設定されます。
.TP
\fBexchange\-point\-and\-mark (C\-x C\-x)\fP
ポイントをマークと入れ換えます。 保存されている位置が現在のカーソル位置になり、 古いカーソル位置がマークとして保存されます。
.TP
\fBcharacter\-search (C\-])\fP
文字を 1 つ読み込み、 その文字が次に現われる場所にポイントを移動させます。 負のカウントを与えると、その文字が前に現われた場所を探します。
.TP
\fBcharacter\-search\-backward (M\-C\-])\fP
文字を 1 つ読み込み、 その文字が前に現われた場所にポイントを移動させます。 負のカウントを与えると、その文字が次に現われる場所を探します。
.TP
\fBskip\-csi\-sequence\fP
Home や End などのキーに定義されるような複数キーからなるシーケンスを 使い切るだけの文字を読み込みます。 これらのシーケンスは、通常
ESC\-[ で表されるコントロールシーケンス (CSI) で始まります。 このシーケンスが "\e[" に割り当てられているとすると、 キーが明示的に
readline のコマンドに割り当てられている場合を除き、 それらのシーケンスを生み出すキーは、
はぐれた文字を編集バッファに挿入されず、何もしません。 このコマンドはデフォルトではキーに割り当てられていませんが、 多くの場合 ESC\-[
に割り当てられます。
.TP
\fBinsert\-comment (M\-#)\fP
数字の引き数を指定しない場合、readline の \fBcomment\-begin\fP 変数の値が現在の行の先頭に挿入されます。
数字の引き数を指定すると、トグル状に動作します。 つまり、行の先頭の文字が \fBcomment\-begin\fP の値にマッチしない場合には、
その値が挿入されます。マッチする場合には、\fBcomment\-begin\fP の文字が行の先頭から削除されます。
いずれの場合も、改行が打ち込まれたのと同じように行の入力が完了します。 \fBcomment\-begin\fP のデフォルト値によって、
このコマンドは現在の行をシェルのコメントとします。 数字の引き数を指定したことでコメントの文字が削除されると、 行はシェルにより実行されます。
.TP
\fBglob\-complete\-word (M\-g)\fP
ポイントの前の単語がパス名展開のパターンとして扱われます。 末尾に暗黙のアスタリスクが付いているものとみなされます。
このパターンを使って補完候補のファイル名のリストが生成されます。
.TP
\fBglob\-expand\-word (C\-x *)\fP
ポイントの前の単語がパス名展開のパターンとして扱われ、 この単語と置き換えられる形でマッチするファイル名のリストが挿入されます。
数字の引き数を与えると、パス名展開の前に末尾にアスタリスクを追加します。
.TP
\fBglob\-list\-expansions (C\-x g)\fP
\fBglob\-expand\-word\fP で生成されるのと同じ展開結果のリストが表示され、 行が再描画されます。
数字の引き数を与えると、パス名展開の前に末尾にアスタリスクを追加します。
.TP
\fBdump\-functions\fP
全ての関数とそのキー割り当てを、 readline の出力ストリームに出力します。 数値の引き数を与えると、 出力は \fIinputrc\fP
に書き込める形に整形されます。
.TP
\fBdump\-variables\fP
全ての設定可能な readline の変数とその値を、 readline の出力ストリームに出力します。 数値の引き数を与えると、 出力は
\fIinputrc\fP に書き込める形に整形されます。
.TP
\fBdump\-macros\fP
マクロに割り当てられた readline のキーシーケンスと マクロが出力する文字列を全て出力します。 数値の引き数を与えると、 出力は
\fIinputrc\fP に書き込める形に整形されます。
.TP
\fBdisplay\-shell\-version (C\-x C\-v)\fP
現在実行している \fBbash\fP のバージョン情報を表示します。
.PD
.SS プログラム補完
.PP
\fBcomplete\fP 組み込みコマンドで 補完仕様 (\fIcompspec\fP) が定義されているコマンドに対して 引き数の単語補完が試みられると、
プログラム補完の機能が呼び出されます (組み込みコマンド \fBcomplete\fP については、後述する
.SM
\fBシェルの組み込みコマンド\fP
を参照)。
.PP
まず、コマンド名が特定されます。 コマンド名の単語が空文字列であれば (空の行の先頭で補完しようとしたとき)、 \fBcomplete\fP の \fB\-E\fP
オプションで定義された補完仕様が使われます。 そのコマンドに対して補完仕様が定義されていれば、
その補完仕様がその単語の補完候補のリスト生成に使われます。 コマンドの単語がフルパス名であれば、 最初にフルパス名の補完仕様が検索されます。
フルパス名に対する補完仕様が見つからなかった場合は、 最後のスラッシュ以降の部分に対して該当する補完仕様を見つけようとします。
補完仕様が見つからなかった場合は、 \fBcomplete\fP の \fB\-D\fP オプションで定義された補完仕様が使われます。
.PP
補完仕様が見つかると、その補完仕様を使って マッチする単語のリストが生成されます。 補完仕様が見つからなかった場合は、 前述の \fB補完\fP
の節で説明したような \fBbash\fP のデフォルトの補完が行われます。
.PP
まず、補完仕様で指定された動作が用いられます。 補完される単語の前置部分にマッチするものだけが返されます。 ファイル名やディレクトリ名の補完に
\fB\-f\fP や \fB\-d\fP オプションが使用された場合は、シェル変数
.SM
\fBFIGNORE\fP がマッチのフィルタとして使用されます。
.PP
続いて \fB\-G\fP オプションによって指定された ファイル名展開パターンの補完が生成されます。 パターンによって生成された単語は、
補完される単語とマッチする必要はありません。
.SM
\fBGLOBIGNORE\fP シェル変数はマッチのフィルタとしては使われませんが、
.SM
\fBFIGNORE\fP 変数は使用されます。
.PP
次に、 \fB\-W\fP オプションで指定された引き数の文字列が考慮されます。 文字列は、最初に
.SM
\fBIFS\fP
特殊変数の文字を区切り文字として分割されます。 シェルのクォート処理は考慮されます。 それぞれの単語は、前述の
.SM
\fB展開\fP
で示したように、ブレース展開、チルダ展開、パラメータと変数の展開、 コマンド置換、算術式展開、パス名展開が行われます。
結果は、前述の\fB単語の分割\fPで示した規則によって分割されます。 展開の結果は補完される単語の前置部分とマッチが行われ、
マッチした単語が補完候補となります。
.PP
これらのマッチが生成された後、 シェル関数や \fB\-F\fP や \fB\-C\fP オプションで指定されたコマンドが呼び出されます。
コマンドや関数が呼び出されるときは、
.SM
\fBCOMP_LINE\fP,
.SM
\fBCOMP_POINT\fP,
.SM
\fBCOMP_KEY\fP,
.SM
\fBCOMP_TYPE\fP 変数に前述の\fBシェル変数\fPで示すように値が設定されます。
シェル関数が呼び出される場合は、
.SM
\fBCOMP_WORDS\fP と
.SM
\fBCOMP_CWORD\fP 変数も設定されます。
関数やコマンドが呼び出されるときは、 最初の引き数は引き数が補完されるコマンドの名前、 二番目の引き数は補完される単語、
三番目の引き数は現在のコマンドラインで補完中の単語の 前に置かれる単語となります。
補完される単語に対して生成された補完の候補はフィルタリングされません。 関数やコマンドは生成されたマッチとは無関係に補完されます。
.PP
\fB\-F\fP で指定された関数がまず呼び出されます。 関数は、後述する \fBcompgen\fP 組み込みコマンドを含めた、
全てのシェルの機能を使ってマッチを生成します。 補完候補は必ず
.SM
\fBCOMPREPLY\fP 配列変数に格納されます。
.PP
続いて \fB\-C\fP オプションで指定されたコマンドが呼び出され、 環境変数をコマンド置換します。 このコマンドは、補完候補を 1
行にひとつずつ標準出力に出力します。 必要があれば、バックスラッシュが改行をエスケープするために使用されます。
.PP
全ての補完候補が生成された後で、 \fB\-X\fP オプションで指定されたフィルタが補完候補に作用します。
フィルタは、パス名展開で使用されたようなパターンです。パターン中の \fB&\fP は補完される単語に置換されます。 文字通りの \fB&\fP
はバックスラッシュでエスケープします。 バックスラッシュはマッチを試みる前に削除されます。 パターンにマッチした補完は候補から削除されます。 先行する
\fB!\fP はパターンを否定します。 この場合、パターンにマッチしなかった補完が削除されます。
.PP
最後に、\fB\-P\fP と \fB\-S\fP オプションで指定された 前置部分と後置部分が補完候補のそれぞれに加えられます。 そして結果が readline
補完コードに補完候補のリストとして返されます。
.PP
直前に行われた動作が何にもマッチせず、 補完仕様が定義されたときに \fB\-o dirnames\fP オプションが \fBcomplete\fP
に与えられていれば、 ディレクトリ名への補完が試みられます。
.PP
補完仕様が定義されたときに \fB\-o plusdirs\fP オプションが \fBcomplete\fP に与えられていれば、
ディレクトリ名への補完が試みられ、マッチした候補が全て ほかの動作の結果に付け加えられます。
.PP
デフォルトでは、補完仕様が見つかった場合、 それが生成したものがなんであれ、 全ての補完候補のリストとして、補完コードに返されます。 デフォルトの
\fBbash\fP 補完は試みられず、 readline のデフォルトのファイル名補完は無効になります。 補完仕様が定義されたときに \fB\-o
bashdefault\fP オプションが \fBcomplete\fP に与えられていれば、 補完仕様が何にもマッチしなければ \fBbash\fP
のデフォルトの補完が試みられます。 補完仕様が定義されたときに \fB\-o default\fP オプションが \fBcomplete\fP に与えられていれば、
補完仕様が (試みられていれば、デフォルトの \fBbash\fP の補完も) 何にもマッチしなければ readline のデフォルトの補完が行われます。
.PP
補完仕様でディレクトリ名の補完が必要とされる場合、 プログラム補完の関数は readline に、
ディレクトリへのシンボリックリンクに補完された名前の最後に スラッシュを追加させます。 これは readline
の変数\fBmark\-symlinked\-directories\fP の設定に関わらず、 readline の変数 \fBmark\-directories\fP
の値に左右されます。
.PP
動的に補完を変えるための方法があります。 これは \fBcomplete \-D\fP で指定されたデフォルトの補完と 組み合わせたときに非常に便利です。
補完の処理のために実行されたシェル関数は、終了ステータスとして 124 を返すことで、補完を再度試みることを指示できます。 シェル関数が 124
を返し、補完が試みられるコマンド (関数が実行されるときの第 1 引き数) に対して定義された補完仕様が
変更されていれば、プログラム補完はコマンドの新しい補完仕様を 探すために最初からやり直されます。 これにより一連の補完が、一度に読み込まれるのではなく、
補完が試みられるときに動的に組み立てられます。
.PP
例えば、補完仕様のライブラリがあり、それぞれがコマンドの名前に 合わせたファイルに保存されていると仮定すると、
以下のデフォルトの補完関数は補完を動的に読み込みます。
.PP
\f(CW_completion_loader()\fP
.br
\f(CW{\fP
.br
\f(CW . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124\fP
.br
\f(CW}\fP
.br
\f(CWcomplete \-D \-F _completion_loader\fP
.br
\fP
.SH "履歴 (HISTORY)"
\fB\-o history\fP オプションを組み込みコマンドの \fBset\fP で有効にすると、 \fIコマンド履歴 (command history)\fP
(以前に入力したコマンドのリスト) にアクセスできるようになります。 変数
.SM HISTSIZE
の値が、履歴リストに保存するコマンドの数になります。 過去に入力したコマンドのうち、最新
.SM
\fBHISTSIZE\fP 個分 (デフォルトは
500 個) のテキストが保存されます。 シェルは各コマンドを、パラメータ展開や変数展開 (前述の
.SM
\fB展開\fP を参照)
を行う前の形で履歴リストに格納します。 ただし、履歴展開は実行してから格納します。 履歴展開はシェル変数
.SM
\fBHISTIGNORE\fP と
.SM
\fBHISTCONTROL\fP の値に従って実行されます。
.PP
起動時に、履歴は変数
.SM
\fBHISTFILE\fP (デフォルトは \fI~/.bash_history\fP)
が示すファイルの内容で初期化されます。
.SM
\fBHISTFILE\fP で指定されたファイルは、
.SM
\fBHISTFILESIZE\fP
で指定された行数を越えないように、必要に応じて切り詰められます。 履歴ファイルを読み込むときに、履歴のコメント文字で始まり直後に数字が続く行は、
直前の履歴行のタイムスタンプとして解釈されます。 こうしたタイムスタンプを表示するかどうかは、変数
.SM
\fBHISTTIMEFORMAT\fP
の値により決まります。 対話的なシェルが終了する際には、最近の
.SM
\fB$HISTSIZE\fP 個の行が履歴リストから
.SM
\fB$HISTFILE\fP にコピーされます。 シェルオプション \fBhistappend\fP (
.SM
\fBシェルの組み込みコマンド\fP の項の
\fBshopt\fP の説明を参照) が有効になっていると、 これらの行が履歴ファイルの末尾に追加されます。
このオプションが無効ならば、履歴ファイルは上書きされます。
.SM
\fBHISTFILE\fP
が設定されていないか、履歴ファイルが書き込めない状態だと、 履歴は保存されません。 変数
.SM
\fBHISTTIMEFORMAT\fP
が設定されている場合、シェルのセッションを越えて保持されるよう、 タイムスタンプが履歴のコメント文字を付けて履歴ファイルに書き込まれます。
履歴のコメント文字は、タイムスタンプをほかの履歴行と区別するために使われます。 履歴の保存を行った後には、履歴ファイルは行数が
.SM
\fBHISTFILESIZE\fP 行を越えないように切り詰められます。
.SM
\fBHISTFILESIZE\fP
が設定されていなければ、切り詰めは行われません。
.PP
組み込みコマンド \fBfc\fP (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照)
を用いると、履歴リストの一部を表示・編集して再実行できます。 組み込みコマンドの \fBhistory\fP を用いると、履歴リストを表示・編集したり、
履歴ファイルを操作したりできます。 コマンドライン編集を使っている場合には、 各編集モードでいろいろな検索コマンドが利用でき、
履歴リストへアクセスできます。
.PP
このシェルでは、どのコマンドが履歴リストに保存されるかを制御できます。
.SM
\fBHISTCONTROL\fP 変数と
.SM
\fBHISTIGNORE\fP 変数を設定すると、 シェルは入力されたコマンドの一部しか保存しなくなります。 シェルオプションの \fBcmdhist\fP
を有効にすると、シェルは複数行に別れているコマンドの各行を 同じ履歴エントリに保存しようとします。
この際には、文法的な正しさを保つためにセミコロンが必要に応じて追加されます。 シェルオプションの \fBlithist\fP
を有効にすると、このシェルは行の途中に セミコロンではなく改行文字を置く形でコマンドを保存します。
シェルオプションの設定と設定取り消しについては、後述の
.SM
\fBシェルの組み込みコマンド\fP における説明を参照してください。
.SH 履歴の展開
.PP
このシェルは、 \fBcsh\fP の履歴展開と同じような履歴機能をサポートしています。 このセクションでは、履歴展開で使用できる記法・機能を説明します。
この機能は対話的シェルならばデフォルトで有効になっていますが、 組み込みコマンド \fBset\fP の \fB\+H\fP オプション (後述の
.SM
\fBシェルの組み込みコマンド\fP を参照) で無効にできます。 非対話的シェルの場合は、デフォルトでは履歴展開は行われません。
.PP
履歴展開は、履歴リスト中の単語を入力ストリームに入れます。 この機能を利用すると、コマンドを繰り返したり、
前のコマンドで指定したオプションを現在の入力行に挿入したり、 前のコマンドの誤りを手早く直したり、 といったことが簡単にできるようになります。
.PP
履歴展開が実行されるのは、入力行全体を読み込んだ直後であり、 シェルが行を単語に分割するよりも前です。 履歴展開の動作は 2 段階で行われます。
まず最初に、置換に使う行を履歴リストから選びます。 次に、その行のどの部分を現在の行に書き込むかを選択します。 履歴リストから選ばれた行は\fIイベント
(event)\fP と呼ばれ、 この行のうち動作の対象となる部分を\fI単語列 (words)\fPと呼びます。 様々な\fI修飾子 (modifier)\fP
が利用でき、 選択された単語列の操作が可能になっています。 行の単語への分割は入力を読み込むときと同じように行われるので、
\fIメタ文字\fPで区切られた複数の単語をクォートで括ったものは 1 つの単語とみなされます。 履歴展開が行われるのは、履歴展開文字が現われたときです。
履歴展開文字はデフォルトでは \^\fB!\fP\^ です。 履歴展開文字をクォートできるのは、 バックスラッシュ (\^\fB\e\fP\^)
とシングルクォートだけです。
.PP
履歴展開文字の直後にあって、クォートされていなくても、 履歴展開されない文字があります。 空白文字、タブ文字、改行文字、復帰文字、\fB=\fP です。
シェルオプションの \fBextglob\fP が有効になっている場合には、 \fB(\fP も展開されません。
.PP
組み込みコマンドの \fBshopt\fP を用いて、何種類かあるシェルオプションを設定すると、 履歴展開の動作を調整できます。 シェルオプションの
\fBhistverify\fP が有効で (組み込みコマンド \fBshopt\fP の説明を参照)、かつ \fBreadline\fP が使われている場合には、
履歴置換を行った結果はすぐにはシェルのパーザに渡されません。 展開された行は \fBreadline\fP
の編集バッファに再び読み込まれ、さらに編集が行える状態になります。 \fBreadline\fP を使用しており、かつシェルオプションの
\fBhistreedit\fP が有効である場合、履歴置換が失敗してもその結果は \fBreadline\fP
の編集バッファに再び読み込まれ、訂正できる状態となります。 組み込みコマンド \fBhistory\fP の \fB\-p\fP
オプションを使うと、実際に履歴展開を行う前に、 どのように展開されるのかを見ることができます。 組み込みコマンド \fBhistory\fP の \fB\-s\fP
オプションを使うと、実際にコマンドの実行をせずに、 コマンドを履歴リストの末尾に追加でき、 それ以降の呼び出しで利用できるようになります。
.PP
このシェルでは、履歴展開機構で使ういろいろな文字を制御できます (前述の \fBシェル変数\fP の項目における \fBhistchars\fP の説明を参照)。
シェルは、履歴ファイルに書き込むときに、履歴のコメント文字を使って、 履歴のタイムスタンプであることが分かるようにします。
.SS "イベント指示子 (Event Designator)"
.PP
イベント指示子は、 履歴リスト中のコマンドラインエントリを参照するものです。 絶対位置の参照でない限り、イベントは履歴リスト内の
現在の位置からの相対的な位置を示します。
.PP
.PD 0
.TP
\fB!\fP
履歴置換を開始します。ただし、 \fBブランク文字\fP、 改行文字、 = 、 ( (シェルオプション \fBextglob\fP が組み込みコマンド
\fBshopt\fP によって有効になっている場合) のいずれかが後に続く場合は除きます。
.TP
\fB!\fP\fIn\fP
\fIn\fP 個目のコマンドラインを参照します。
.TP
\fB!\-\fP\fIn\fP
現在から \fIn\fP 個前のコマンドを参照します。
.TP
\fB!!\fP
直前のコマンドを参照します。`!\-1' と同義です。
.TP
\fB!\fP\fIstring\fP
\fIstring\fP で始まるコマンドのうち、履歴リスト中の現在位置以前で、 一番近いところで実行したものを参照します。
.TP
\fB!?\fP\fIstring\fP\fB[?]\fP
\fIstring\fP を含むコマンドのうち、履歴リスト中の現在位置以前で、 一番近いところで実行したものを参照します。 \fIstring\fP
の直後が改行文字ならば、最後の \fB?\fP は省略してもかまいません。
.TP
\fB\d\s+2^\s-2\u\fP\fIstring1\fP\fB\d\s+2^\s-2\u\fP\fIstring2\fP\fB\d\s+2^\s-2\u\fP
簡易置換。 \fIstring1\fP を \fIstring2\fP に置換して直前のコマンドを繰り返します。
\*(lq!!:s/\fIstring1\fP/\fIstring2\fP/\*(rq と同義です (後述の\fB修飾子\fPを参照)。
.TP
\fB!#\fP
これまでに打ち込んだコマンドライン全体。
.PD
.SS "単語指示子 (Word Designators)"
.PP
単語指示子 (word designator) は、 イベントから所望の欲しい単語を選ぶときに用いられます。 イベント指定と単語指示子のセパレータには
\fB:\fP を用います。 単語指示子が \fB^\fP, \fB$\fP, \fB*\fP, \fB\-\fP, \fB%\fP
のいずれかで始まる場合には、このセパレータは省略できます。 単語には行の先頭から順に番号が振られ、 先頭の単語が 0 になります。
単語は現在の行に、空白 1 つで区切られて挿入されます。
.PP
.PD 0
.TP
\fB0 (ゼロ)\fP
0 番目の単語。シェルにとっては、コマンドを表す単語になります。
.TP
\fIn\fP
\fIn\fP 番目の単語。
.TP
\fB^\fP
最初の引き数。つまり 1 番目の単語です。
.TP
\fB$\fP
最後の引き数。
.TP
\fB%\fP
`?\fIstring\fP?' 検索にマッチする、一番現在に近い単語。
.TP
\fIx\fP\fB\-\fP\fIy\fP
単語の範囲。`0\-\fIy\fP' の省略形として `\-\fIy\fP' が使えます。
.TP
\fB*\fP
0 番目を除く全ての単語。これは `\fI1\-$\fP' の別表現です。 イベント中に単語が 1 つしかない場合に \fB*\fP を使ってもエラーにはなりません。
この場合には空文字列が返されます。
.TP
\fBx*\fP
\fIx\-$\fP の省略形です。
.TP
\fBx\-\fP
\fBx*\fP と同様に \fIx\-$\fP の省略形ですが、 ただし最後の単語は含みません。
.PD
.PP
イベント指定なしに単語指示子が与えられた場合、 直前のコマンドがイベントとして使われます。
.SS "修飾子 (Modifiers)"
.PP
単語指示子 (省略可能) の後には、 1 個以上の以下に示す修飾子を並べて置くことができます。 それぞれの修飾子の前には `:' を付けます。
.PP
.PD 0
.PP
.TP
\fBh\fP
パス名から末尾にある部分 (ファイル名) を取り除き、 前の方 (ディレクトリ部) だけを残します。
.TP
\fBt\fP
パス名から前の方 (ディレクトリ部) を取り除き、 末尾にある部分 (ファイル名) だけを残します。
.TP
\fBr\fP
末尾にある \fI.xxx\fP 形式のサフィックスを取り除き、 ベース名 (basename) だけを残します。
.TP
\fBe\fP
末尾のサフィックスだけを残して、全ての部分を取り除きます。
.TP
\fBp\fP
新しいコマンドを表示しますが、実行はしません。
.TP
\fBq\fP
置換が行われた単語をクォートし、それ以上の置換が行われないようにします。
.TP
\fBx\fP
\fBq\fP と同じように置換後の単語をクォートしますが、 \fB空白文字\fP と改行文字のところで単語に分割します。
.TP
\fBs/\fP\fIold\fP\fB/\fP\fInew\fP\fB/\fP
イベント行で最初に現われた \fIold\fP を \fInew\fP に置き換えます。/ の代わりに任意の区切り文字を使うこともできます。
最後の区切り文字がイベント行の最後の文字ならば、 これは省略できます。 バックスラッシュ 1 つでクォートすれば、 \fIold\fP と \fInew\fP
の中で区切り文字も使えます。 \fInew\fP に & が含まれている場合には、 & は \fIold\fP に置き換えられます。 バックスラッシュ 1
つを前に置けば & をクォートできます。 \fIold\fP が空文字列ならば、最後に置換された \fIold\fP が設定されます。
以前に履歴置換が全く行われていない場合には、現在に一番近い \fB!?\fP\fIstring\fP\fB[?]\fP の検索で使われた \fIstring\fP
が設定されます。
.TP
\fB&\fP
直前の置換を繰り返します。
.TP
\fBg\fP
変更をイベント行全体に適用します。 これは `\fB:s\fP' (例:`\fB:gs/\fP\fIold\fP\fB/\fP\fInew\fP\fB/\fP') や `\fB:&\fP'
と組み合わせて使われます。 `\fB:s\fP' と一緒に使った場合には、 / の代わりに任意の区切り文字を使えます。
また、最後の区切り文字がイベント行の最後の文字ならば、 これは省略できます。 \fBg\fP の別名として \fBa\fP を使うこともできます。
.TP
\fBG\fP
この修飾子に続く `\fBs\fP' 修飾子をイベント行の各単語に 1 回ずつ適用します。
.PD
.SH シェルの組み込みコマンド
.\" start of bash_builtins
.zZ
.PP
特に断らない限り、このセクションで説明されている組み込みコマンドのうち \fB\-\fP で始まるオプションを受け付けるものは、オプションの終わりを表す
\fB\-\-\fP も受け付けます。 組み込みコマンド \fB:\fP, \fBtrue\fP, \fBfalse\fP, \fBtest\fP はオプションを持たず、\fB\-\-\fP
を特別扱いしません。 組み込みコマンド \fBexit\fP, \fBlogout\fP, \fBbreak\fP, \fBcontinue\fP, \fBlet\fP,
\fBshift\fP は、\fB\-\fP で始まる引き数として受け取るのに、 \fB\-\-\fP を必要としません。 そのほかの組み込みコマンドは、
受け取ると明記されているオプション以外を引き数として受け取り、 \fB\-\fP で始まる引き数を不正なオプションをとて解釈します。 この解釈を防ぐには
\fB\-\-\fP が必要です。
.sp .5
.PD 0
.TP
\fB:\fP [\fIarguments\fP]
.PD
何もしません。このコマンドは \fIarguments\fP を展開し、指定されたリダイレクトを実行する以外には何も行いません。 終了コード 0 を返します。
.TP
\fB.\| \fP \fIfilename\fP [\fIarguments\fP]
.PD 0
.TP
\fBsource\fP \fIfilename\fP [\fIarguments\fP]
.PD
\fIfilename\fP からコマンドを読み込み、現在のシェル環境の下で実行します。 \fIfilename\fP
内の最後に実行したコマンドの終了ステータスを返します。 \fIfilename\fP にスラッシュが含まれていない場合、 \fIfilename\fP は
.SM
\fBPATH\fP に含まれるディレクトリから探されます。
.SM
\fBPATH\fP
内で検索されるファイルは、実行可能である必要はありません。 \fBbash\fP が \fIposix モード\fP 以外で動作しているときは、
.SM
\fBPATH\fP 中でファイルを見つけられなかった場合に、 カレントディレクトリが検索されます。 組み込みコマンド \fBshopt\fP に対する
\fBsourcepath\fP オプションが無効にされている場合、
.SM
\fBPATH\fP の検索は行われません。 何らかの \fIarguments\fP
が指定された場合、これらの引き数は \fIfilename\fP を実行したときの位置パラメータとなります。
指定されなかった場合は、位置パラメータは変更されません。 返却ステータスはスクリプト内で最後に実行したコマンドのステータスです
(コマンドが全く実行されなければ 0 です)。 \fIfilename\fP が見つからない場合や読み込めない場合には偽となります。
.TP
\fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
\fBalias\fP コマンドを引き数を付けずに (あるいは \fB\-p\fP オプションを付けて) 実行すると、エイリアスのリストが 「\fBalias\fP
\fIname\fP=\fIvalue\fP」の形で標準出力に出力されます。 引き数を与えた場合には、\fIvalue\fP を与えられた \fIname\fP
それぞれに対するエイリアスが定義されます。 \fIvalue\fP の末尾に空白があると、エイリアスが展開されたときに、
空白の次の単語についてエイリアス置換があるかどうか調べられます。 引き数リスト中に \fIvalue\fP が与えられていない \fIname\fP
があった場合は、 それぞれに対して名前とエイリアスの値が出力されます。 エイリアスが定義されていない \fIname\fP が指定された場合以外は、
\fBalias\fP は真を返します。
.TP
\fBbg\fP [\fIjobspec\fP ...]
サスペンドされているジョブ \fIjobspec\fP を バックグラウンドで実行再開します。このジョブは、初めから \fB&\fP
を付けて起動されていたかのように動作を続けます。 \fIjobspec\fP がない場合には、 シェルが記録している\fIカレントジョブ (current
job)\fP が使われます。 \fBbg\fP \fIjobspec\fP は通常 0 を返しますが、ジョブ制御が無効であるときに実行した場合や、
ジョブ制御が有効であっても \fIjobspec\fP が有効なジョブを指定していない場合や \fIjobspec\fP
がジョブ制御なしで開始したジョブを指定している場合は異なる値を返します。
.TP
\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lpsvPSV\fP]
.PD 0
.TP
\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-q\fP \fIfunction\fP] [\fB\-u\fP \fIfunction\fP] [\fB\-r\fP \fIkeyseq\fP]
.TP
\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP
.TP
\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP:\fIshell\-command\fP
.TP
\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP
.TP
\fBbind\fP \fIreadline\-command\fP
.PD
\fBreadline\fP の現在のキー割り当てと関数割り当てを表示したり、 キーシーケンスを \fBreadline\fP の関数やマクロに割り当てたり、
\fBreadline\fP の変数を設定したりします。 オプション以外の引き数はすべて、 \fI.inputrc ,\fP に書くのと同じ形式のコマンドですが、
それぞれの割り当てやコマンドは独立した引き数として渡さなければなりません。 例えば '"\eC\-x\eC\-r": re\-read\-init\-file'
のように指定します。 オプションを指定した場合には、以下のような意味を持ちます:
.RS
.PD 0
.TP
\fB\-m \fP\fIkeymap\fP
キーマップ \fIkeymap\fP を、以降の割り当てによって変更します。 指定できる \fIkeymap\fP 名は、 \fIemacs,
emacs\-standard, emacs\-meta, emacs\-ctlx, vi, vi\-move, vi\-command\fP,
\fIvi\-insert\fP です。 \fIvi\fP は \fIvi\-command\fP と同じです。 また \fIemacs\fP は
\fIemacs\-standard\fP と同じです。
.TP
\fB\-l\fP
\fBreadline\fP 関数の名前を全てリスト表示します。
.TP
\fB\-p\fP
\fBreadline\fP の関数の名前と割り当てを表示します。 表示は、再び読み込みできる形式で出力されます。
.TP
\fB\-P\fP
\fBreadline\fP の関数の現在の名前と割り当てをリスト表示します。
.TP
\fB\-s\fP
マクロに割り当てられた \fBreadline\fP のキーシーケンスと、 マクロが出力する文字列を表示します。
表示は、再び読み込みできる形式で出力されます。
.TP
\fB\-S\fP
マクロに割り当てられた \fBreadline\fP のキーシーケンスと、 マクロが出力する文字列を表示します。
.TP
\fB\-v\fP
\fBreadline\fP の変数名と値を表示します。 表示は、再び読み込みできる形式で出力されます。
.TP
\fB\-V\fP
\fBreadline\fP の現在の変数名と値をリスト表示します。
.TP
\fB\-f \fP\fIfilename\fP
キー割り当てを \fIfilename\fP から読み込みます。
.TP
\fB\-q \fP\fIfunction\fP
指定された \fIfunction\fP を呼び出すキーを問い合わせます。
.TP
\fB\-u \fP\fIfunction\fP
指定された \fIfunction\fP に割り当てられているキーの割り当てを 全て取り消します。
.TP
\fB\-r \fP\fIkeyseq\fP
\fIkeyseq\fP に対する現在の割り当てを削除します。
.TP
\fB\-x \fP\fIkeyseq\fP\fB:\fP\fIshell\-command\fP
\fIkeyseq\fP が押されるたびに、 \fIshell\-command\fP が実行されるようにします。 \fIshell\-command\fP
を実行するとき、シェルは変数
.SM
\fBREADLINE_LINE\fP に \fBreadline\fP の編集バッファの内容を設定し、変数
.SM
\fBREADLINE_POINT\fP に現在の挿入ポイントの位置を設定します。 実行したコマンドが
.SM
\fBREADLINE_LINE\fP や
.SM
\fBREADLINE_POINT\fP の値を変更した場合、新しい値が編集の状態に反映されます。
.PD
.PP
認識できないオプションが与えられた場合やエラーが起きた場合以外は、 返り値は 0 になります。
.RE
.TP
\fBbreak\fP [\fIn\fP]
\fBfor\fP, \fBwhile\fP, \fBuntil\fP, \fBselect\fP のループから抜けます。\fIn\fP が指定されていれば、\fIn\fP レベル分
のループを break します。 \fIn\fP は 1 以上でなければなりません。 \fIn\fP がループの深さよりも大きい場合には、全てのループから抜けます。
\fIn\fP が 1 未満の場合を除けば、返り値は 0 です。
.TP
\fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP]
指定されたシェル組み込みコマンドを実行します。コマンドには \fIarguments\fP を引き数として渡し、このコマンドの終了ステータスを返します。
これはシェル組み込みコマンドと同じ名前の関数を定義するときに便利で、 その関数内で組み込みコマンドの機能を使うことができます。 組み込みコマンド
\fBcd\fP は普通、これを使って再定義されます。 \fIshell\-builtin\fP がシェル組み込みコマンドでなければ、終了ステータスは偽となります。
.TP
\fBcaller\fP [\fIexpr\fP]
実行中のサブルーチン (シェル関数や、組み込みコマンド \fB.\fP か \fBsource\fP で呼び出したスクリプト) 呼び出しのコンテキストを返します。
\fIexpr\fP が指定されていなければ、\fBcaller\fP は 現在のサブルーチン呼び出しの行番号とソースファイル名を表示します \fIexpr\fP
に負でない整数が与えられた場合、\fBcaller\fP は、 現在の呼び出しスタック中で指定した位置の行番号、サブルーチン名、 ソースファイルを表示します。
スタックトレースを表示する場合などに、範囲外の情報が使われるかもしれません。 現在のフレームはフレーム 0 です。
シェルがサブルーチンを呼び出していない場合や、 \fIexpr\fP が呼び出しスタックの有効な位置に相当しない場合を除けば、 返り値は 0 です。
.TP
\fBcd\fP [\fB\-L\fP|[\fB\-P\fP [\fB\-e\fP]]] [\fIdir\fP]
カレントディレクトリを \fIdir\fP に変更します。 変数
.SM
\fBHOME\fP の値が \fIdir\fP のデフォルト値です。変数
.SM
\fBCDPATH\fP は、 \fIdir\fP を含むディレクトリの検索パスを定義します。
.SM
\fBCDPATH\fP 内では候補ディレクトリ名はコロン
(:) で区切ります。
.SM
\fBCDPATH\fP 中に空のディレクトリ名がある場合、これはカレントディレクトリ (つまり \*(lq\fB.\fP\*(rq)
を意味します。 \fIdir\fP がスラッシュ (/) で始まる場合には、
.SM
\fBCDPATH\fP は使われません。 \fB\-P\fP
オプションは、シンボリックリンクを辿らないで物理的なディレクトリ構造を 使うように指示します (組み込みコマンド \fBset\fP の \fB\-P\fP
オプションも参照)。 \fB\-L\fP オプションを指定すると、シンボリックリンクを辿るようになります。 \fB\-e\fP オプションを \fB\-P\fP
オプションと同時に指定すると、ディレクトリの変更が成功した後に カレントディレクトリが判定できない場合、\fBcd\fP は失敗のステータスを返します。
引き数に \fB\-\fP を指定するのは、
.SM
\fB$OLDPWD\fP を指定するのと同じ意味です。
.SM
\fBCDPATH\fP
内の空以外のディレクトリ名が使われたときや、 \fB\-\fP が最初の引き数のときに、ディレクトリの変更が成功すると、
新しいディレクトリの絶対パス名が標準出力に書かれます。 ディレクトリの変更が成功した場合には返り値は真になり、 そうでない場合には偽になります。
.TP
\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP ...]
\fIcommand\fP に引き数 \fIargs\fP を付けて実行します。ただし、シェル関数の通常の参照は行いません。 組み込みコマンドと
.SM
\fBPATH\fP 内で見つかるコマンドだけが実行されます。 \fB\-p\fP オプションが与えられると、 \fIcommand\fP の検索を行う際に \fBPATH\fP
のデフォルト値が使われます。これにより、 全ての標準ユーティリティを確実に見つけられます。 \fB\-V\fP オプションまたは \fB\-v\fP
オプションを与えると、 \fIcommand\fP の説明が出力されます。 \fB\-v\fP オプションでは、 \fIcommand\fP
を起動するときに使われるコマンドやファイル名を示す単語が表示されます。 \fB\-V\fP ではさらに詳しい説明が表示されます。 \fB\-V\fP オプションや
\fB\-v\fP オプションを与えた場合、終了ステータスは \fIcommand\fP が見つかれば 0 となり、見つからなければ 1 となります。
どちらのオプションも与えなかった場合に、エラーが起きたり、 \fIcommand\fP を見つけられなかったりすると、終了ステータスは 127 になります。
それ以外の場合には、組み込みコマンド \fBcommand\fP の終了ステータスは、 \fIcommand\fP の終了ステータスです。
.TP
\fBcompgen\fP [\fIoption\fP] [\fIword\fP]
\fIoption\fP に従って、\fIword\fP にマッチする補完候補のリストを生成します。 オプションには \fBcomplete\fP
組み込みコマンドと同じものが指定できますが、 \fB\-p\fP と \fB\-r\fP は指定できません。 マッチのリストは標準出力に出力されます。 \fB\-F\fP や
\fB\-C\fP オプションを使用したときは、 プログラム補完機能によって設定された様々なシェル変数は、 利用可能であっても有用な値を持ちません。
.sp 1
マッチのリストは、同じフラグによる補完仕様で プログラム補完のコードが直接生成したかのように 生成されます。 \fIword\fP
が指定されると、\fIword\fP にマッチする補完だけが表示されます。
.sp 1
戻り値は、 無効なオプションが指定された場合やマッチが生成されなかった場合以外は 真になります。
.TP
\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp\-option\fP] [\fB\-DE\fP] [\fB\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP]
.br
[\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname
\&...\fP]
.PD 0
.TP
\fBcomplete\fP \fB\-pr\fP [\fB\-DE\fP] [\fIname\fP ...]
.PD
各 \fIname\fP の引き数を、どのように補完するのかを指定します。 \fB\-p\fP オプションが指定された場合や、
何もオプションが指定されなかった場合は、 現在の補完仕様が (入力として再利用できる形で) 出力されます。 \fB\-r\fP オプションは、それぞれの
\fIname\fP の補完指定を削除します。 \fIname\fP が指定されなかった場合は全ての補完指定を削除します。 \fB\-D\fP
オプションは、残りのオプションと動作を \*(lqデフォルトの\*(rq コマンド補完 (補完が定義されていないコマンドに対して 試みられる補完)
に適用することを示します。 \fB\-E\fP オプションは、残りのオプションと動作を \*(lq空の\*(rq コマンド補完 (空行に対して試みられる補完)
に適用することを示します。
.sp 1
単語補完が試みられたときに、補完指定が適用される流れは、 前述の \fBプログラム補完\fP で説明されています。
.sp 1
他のオプションは、指定された場合、以下のような意味を持ちます。 \fB\-G\fP, \fB\-W\fP, \fB\-X\fP オプションの引き数 (必要ならば \fB\-P\fP と
\fB\-S\fP オプションの場合も) はクォートして、 組み込みコマンド \fBcomplete\fP が呼び出される前に展開されないようにすべきです。
.RS
.PD 0
.TP 8
\fB\-o\fP \fIcomp\-option\fP
\fIcomp\-option\fP は補完仕様の動作をいくつかの観点から制御し、 単純な補完生成以外ができるようにします。 \fIcomp\-option\fP
には以下のどれかひとつを指定できます。
.RS
.TP 8
\fBbashdefault\fP
補完仕様がマッチを全く生成しなかった場合に、 \fBbash\fP のデフォルトの補完を用います。
.TP 8
\fBdefault\fP
補完仕様がマッチを全く生成しなかった場合に、 readline のデフォルトの補完を用います。
.TP 8
\fBdirnames\fP
補完仕様がマッチを全く生成しなかった場合に、 ディレクトリ名を補完しようとします。
.TP 8
\fBfilenames\fP
補完仕様がファイル名を生成することを readline に伝え、 readline がファイル名特有の処理
(ディレクトリ名にスラッシュを加えたり、特殊文字をクォートしたり、 末尾の空白を削除したり、など) を行えるようにします。
シェル関数と共に用いることを想定しています。
.TP 8
\fBnospace\fP
行末で単語を補完したときに空白を付け加える動作 (デフォルトの動作) を やめるように readline に伝えます。
.TP 8
\fBplusdirs\fP
補完仕様で定義されたマッチした候補が生成された後に、 ディレクトリ名の補完を試み、ほかの動作の結果にマッチした候補が 全て追加されます。
.RE
.TP 8
\fB\-A\fP \fIaction\fP
\fIaction\fP は補完候補リストの生成動作で、 以下のどれかひとつを指定します。
.RS
.TP 8
\fBalias\fP
エイリアス名。\fB\-a\fP でも指定できます。
.TP 8
\fBarrayvar\fP
配列変数名。
.TP 8
\fBbinding\fP
\fBreadline\fP キー割り当て名。
.TP 8
\fBbuiltin\fP
シェル組み込みコマンド名。\fB\-b\fP でも指定できます。
.TP 8
\fBcommand\fP
コマンド名。\fB\-c\fP でも指定できます。
.TP 8
\fBdirectory\fP
ディレクトリ名。\fB\-d\fP でも指定できます。
.TP 8
\fBdisabled\fP
無効にされているシェル組み込みコマンドの名前。
.TP 8
\fBenabled\fP
有効にされているシェル組み込みコマンドの名前。
.TP 8
\fBexport\fP
エクスポートされたシェル変数の名前。 \fB\-e\fP でも指定できます。
.TP 8
\fBfile\fP
ファイル名。\fB\-f\fP でも指定できます。
.TP 8
\fBfunction\fP
シェル関数の名前。
.TP 8
\fBgroup\fP
グループ名。\fB\-g\fP でも指定できます。
.TP 8
\fBhelptopic\fP
組み込みコマンド \fBhelp\fP に指定できるヘルプのトピック名。
.TP 8
\fBhostname\fP
.SM
\fBHOSTFILE\fP シェル変数で指定されたファイルから得られたホスト名。
.TP 8
\fBjob\fP
ジョブ名 (ジョブ制御が有効な場合)。\fB\-j\fP でも指定できます。
.TP 8
\fBkeyword\fP
シェルの予約語。\fB\-k\fP でも指定できます。
.TP 8
\fBrunning\fP
ジョブ制御が有効であれば、実行中のジョブ名。
.TP 8
\fBservice\fP
サービス名。\fB\-s\fP でも指定できます。
.TP 8
\fBsetopt\fP
組み込みコマンド \fBset\fP の \fB\-o\fP オプションで有効な引き数。
.TP 8
\fBshopt\fP
組み込みコマンド \fBshopt\fP に指定できるシェルオプション名。
.TP 8
\fBsignal\fP
シグナル名。
.TP 8
\fBstopped\fP
停止しているジョブ名 (ジョブ制御が有効な場合)。
.TP 8
\fBuser\fP
ユーザ名。\fB\-u\fP でも指定できます。
.TP 8
\fBvariable\fP
全てのシェル変数名。\fB\-v\fP でも指定できます。
.RE
.TP 8
\fB\-C\fP \fIcommand\fP
\fIcommand\fP がサブシェル環境で実行され、 その出力が補完候補として使用されます。
.TP 8
\fB\-F\fP \fIfunction\fP
シェル関数 \fIfunction\fP は現在のシェル環境で実行されます。 関数が終了したときに、補完候補が
.SM
\fBCOMPREPLY\fP
配列変数から取得されます。
.TP 8
\fB\-G\fP \fIglobpat\fP
パス名展開パターン \fIglobpat\fP を展開し、 補完候補のリストを生成します。
.TP 8
\fB\-P\fP \fIprefix\fP
ほかの全てのオプションが適用された後で、 それぞれの補完候補の先頭に \fIprefix\fP が付け加えられます。
.TP 8
\fB\-S\fP \fIsuffix\fP
ほかの全てのオプションが適用された後で、 それぞれの補完候補の後に \fIsuffix\fP が付け加えられます。
.TP 8
\fB\-W\fP \fIwordlist\fP
\fIwordlist\fP は
.SM
\fBIFS\fP 特殊変数に含まれる文字を区切り文字として分割され、 分割された単語がそれぞれ展開されます。
展開結果のリストのメンバのうち、補完中の単語がマッチするものが、 補完候補となります。
.TP 8
\fB\-X\fP \fIfilterpat\fP
\fIfilterpat\fP がパス名展開のパターンとして使用されます。 先行するオプション・引き数によって生成された補完候補のリストに適用され、
\fIfilterpat\fP とマッチするそれぞれの補完候補がリストから削除されます。 \fIfilterpat\fP が \fB!\fP
で始まる場合、パターンの否定の意味になります。 つまり、\fIfilterpat\fP にマッチしない補完対象が削除されます。
.PD
.PP
不正なオプションが指定された場合、\fB\-p\fP と \fB\-r\fP 以外のオプションで \fIname\fP が指定されなかった場合、 存在しない \fIname\fP
の指定によって補完が削除されようとした場合、 補完の指定の追加に失敗した場合、を除いては、返り値は真になります。
.RE
.TP
\fBcompopt\fP [\fB\-o\fP \fIoption\fP] [\fB\-DE\fP] [\fB+o\fP \fIoption\fP] [\fIname\fP]
\fIname\fP の補完オプションを \fIoption\fP に従って変更します。 \fIname\fP が指定されない場合は、実行中の補完が対象になります。
\fIoption\fPs が与えられない場合は、\fIname\fP または現在の補完の 補完オプションを表示します。 \fIoption\fP
に指定できる値は、前述の組み込みコマンド \fBcomplete\fP で有効なものです。 \fB\-D\fP オプションは、残りのオプションを \*(lqデフォルトの\*(rq
コマンド補完 (補完が定義されていないコマンドに対して 試みられる補完) に適用することを示します。 \fB\-E\fP オプションは、残りのオプションを
\*(lq空の\*(rq コマンド補完 (空行に対して試みられる補完) に適用することを示します。
.sp 1
不正なオプションが指定された場合、 補完仕様が定義されていない \fIname\fP のオプションを変更しようとした場合、
出力エラーが起こった場合、を除いては、返り値は真になります。
.TP
\fBcontinue\fP [\fIn\fP]
\fBfor\fP, \fBwhile\fP, \fBuntil\fP, \fBselect\fP ループの次の繰り返し分から実行を継続します。 \fIn\fP を指定すると、深さを
\fIn\fP 個分上がったループで実行を継続します。 \fIn\fP は 1 以上でなければなりません。 \fIn\fP がループの深さよりも大きい場合、 最後のループ
(「トップレベル」のループ) で実行が継続されます。 \fIn\fP が 1 未満の場合を除けば、返り値は 0 です。
.TP
\fBdeclare\fP [\fB\-aAfFgilrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
.PD 0
.TP
\fBtypeset\fP [\fB\-aAfFgilrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
.PD
変数を宣言したり、変数に属性を与えたりします。 \fIname\fP を指定しなければ、変数の値が表示されます。 \fB\-p\fP オプションを指定すると、各
\fIname\fP の属性と値が表示されます。 \fB\-p\fP に \fIname\fP 引き数を指定すると、他のオプションは無視されます。 \fB\-p\fP オプションが
\fIname\fP 引き数なしで指定されると、 他のオプションで指定された属性を持っている 全ての変数の属性と値を表示します。 \fB\-p\fP
以外のオプションが指定されない場合、 \fBdeclare\fP は全てのシェル変数の属性と値を表示します。 \fB\-f\fP
オプションは表示をシェル関数に限定します。 \fB\-F\fP オプションを指定すると、関数定義の表示を止めます。 関数の名前と属性だけが出力されます。
\fBshopt\fP によってシェルオプション \fBextdebug\fP が有効になっていれば、
関数が定義されているソースファイルの名前と行番号も表示されます。 \fB\-F\fP オプションを指定すると、 \fB\-f\fP オプションも指定したことになります。
\fB\-g\fP オプションを指定すると、\fBdeclare\fP がシェル関数の中で実行されたときであっても、 グローバルスコープで変数の作成、変更を行います。
ほかの場合には無視されます。 以下のオプションを使うと、 指定した属性を持つ変数の出力を限定したり、 変数に属性を与えたりできます:
.RS
.PD 0
.TP
\fB\-a\fP
各 \fIname\fP は配列変数です (前述の \fB配列\fP を参照)。
.TP
\fB\-A\fP
各 \fIname\fP は連想配列変数です (前述の \fB配列\fP を参照)。
.TP
\fB\-f\fP
関数名だけを使います。
.TP
\fB\-i\fP
変数を整数として扱います。変数に値が代入されたときに算術式評価 (
.SM
\fB算術式評価\fP を参照) が実行されます。
.TP
\fB\-l\fP
変数に値が代入されると、全ての大文字は小文字に変換されます。 大文字属性は無効になります。
.TP
\fB\-r\fP
\fIname\fP を読み込み専用にします。 これ以降、代入文を用いて値を代入したり unset したりできなくなります。
.TP
\fB\-t\fP
各 \fIname\fP に \fItrace\fP 属性を与えます。 trace 属性を付与された関数は \fBDEBUG\fP と \fBRETURN\fP のトラップを
呼び出したシェルから受け継ぎます trace 属性は変数には意味を持ちません。
.TP
\fB\-u\fP
変数に値が代入されると、全ての小文字は大文字に変換されます。 小文字属性は無効になります。
.TP
\fB\-x\fP
\fIname\fP に印を付け、 これ以降に実行するコマンドに環境経由でエクスポートします。
.PD
.PP
`\-' ではなく `+' を使うと属性を消します。 ただし例外として、\fB+a\fP を使って配列変数を破棄することはできず、 \fB+r\fP
を使って読み込み専用属性を消すことはできません。 関数内で使った場合、 \fB\-g\fP オプションが与えられなかった場合、 \fBlocal\fP
コマンドを使った場合と同様に \fIname\fP はローカル変数となります。 変数名に =\fIvalue\fP が続く場合、 変数の値として \fIvalue\fP
が設定されます。 返り値は基本的には 0 ですが、不正なオプションに出会った場合、
.if n ``\-f foo=bar'',
.if t \f(CW\-f foo=bar\fP,
を使って関数を定義しようとした場合、 読み込み専用の変数に代入しようとした場合、 複合代入構文を使わずに配列変数に値を代入しようとした場合 (前述の
\fB配列\fP を参照)、\fIname\fP のいずれかが正しいシェル変数名でない場合、 読み込み専用変数の読み込み専用属性を無効にしようとした場合、
配列変数の配列属性を無効にしようとした場合、 存在しない関数を \fB\-f\fP オプションで表示しようとした場合は除きます。
.RE
.TP
\fBdirs [+\fP\fIn\fP\fB] [\-\fP\fIn\fP\fB] [\-clpv]\fP
オプションがないときは、 現在記憶しているディレクトリのリストが表示されます。 デフォルトでは、全てのディレクトリ名は空白で区切って 1
行で表示されます。 ディレクトリは \fBpushd\fP コマンドによってリストに追加されます。 \fBpopd\fP コマンドはリストからエントリを削除します。
.RS
.PD 0
.TP
\fB+\fP\fIn\fP
オプションなしで \fBdirs\fP を起動したときに表示されるリストの、 左から数えて \fIn\fP 番目のエントリを表示します。 エントリは 0
から始まります。
.TP
\fB\-\fP\fIn\fP
オプションなしで \fBdirs\fP を起動したときに表示されるリストの、 右から数えて \fIn\fP 番目のエントリを表示します。 エントリは 0
から始まります。
.TP
\fB\-c\fP
全てのエントリを削除し、ディレクトリスタックをクリアします。
.TP
\fB\-l\fP
長い形式のリスト表示を行います。 デフォルトのリスト表示フォーマットでは、 チルダを使ってホームディレクトリを表します。
.TP
\fB\-p\fP
1 行に 1 エントリの形でディレクトリスタックを出力します。
.TP
\fB\-v\fP
1 行に 1 エントリの形でディレクトリスタックを出力します。 各エントリの前にはスタック内での番号が表示されます。
.PD
.PP
不正なオプションが与えられた場合とインデックス \fIn\fP がディレクトリスタックの末尾を越えている場合を除き、 返り値は 0 となります。
.RE
.TP
\fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIjobspec\fP ...]
オプションなしの場合には、それぞれの \fIjobspec\fP がアクティブなジョブのテーブルから削除されます。 \fIjobspec\fP がなく、かつ
\fB\-a\fP オプションも \fB\-r\fP オプションも 与えられていない場合には、\fIカレントジョブ\fPが使われます。 \fB\-h\fP
オプションが与えられている場合、どの \fIjobspec\fP もテーブルから削除されず、 シェルが
.SM
\fBSIGHUP\fP
を受け取ってもそのジョブには
.SM
\fBSIGHUP\fP が送られないように印が付けられます。 \fIjobspec\fP が与えられていない場合、
\fB\-a\fP オプションは全てのジョブを削除するか 全てのジョブに印を付けるという意味 となります。 \fIjobspec\fP 引き数なしで \fB\-r\fP
オプションを指定すると、 実行中のジョブだけが操作の対象となります。 \fIjobspec\fP が有効なジョブを指定していない場合を除き、返り値は 0
となります。
.TP
\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...]
\fIarg\fP を空白で区切って出力し、最後に改行を出力します。 終了ステータスは常に 0 です。 \fB\-n\fP
が指定された場合、最後の改行は出力されません。 \fB\-e\fP オプションを指定した場合、
以下に示す、バックスラッシュのエスケープ文字が解釈されるようになります。 \fB\-E\fP オプションを指定すると、
デフォルトでこのようなエスケープ文字が解釈されるシステムであっても、 エスケープ文字が解釈されないようになります。 \fBxpg_echo\fP
シェルオプションを用いると、 \fBecho\fP がこれらのエスケープ文字を展開するかどうかの デフォルト動作を動的に決定できます。 \fBecho\fP は
\fB\-\-\fP をオプションの終わりと解釈しません。 \fBecho\fP は以下のエスケープシーケンスを解釈します:
.RS
.PD 0
.TP
\fB\ea\fP
警告 (ベル)
.TP
\fB\eb\fP
バックスペース
.TP
\fB\ec\fP
行末に改行を付けない
.TP
\fB\ee\fP
.TP
\fB\eE\fP
エスケープ文字
.TP
\fB\ef\fP
フォームフィード
.TP
\fB\en\fP
改行
.TP
\fB\er\fP
復帰 (carriage return)
.TP
\fB\et\fP
水平タブ
.TP
\fB\ev\fP
垂直タブ
.TP
\fB\e\e\fP
バックスラッシュ
.TP
\fB\e0\fP\fInnn\fP
8 進値で \fInnn\fP である 8 ビット文字 (8 進数で 0〜3 桁)。
.TP
\fB\ex\fP\fIHH\fP
16 進値が \fIHH\fP である 8 ビット文字 (16 進で 1〜2 桁)。
.TP
\fB\eu\fP\fIHHHH\fP
16 進値が \fIHHHH\fP であるユニコード (ISO/IEC 10646) 文字 (16 進 1〜4 桁)。
.TP
\fB\eU\fP\fIHHHHHHHH\fP
16 進値が \fIHHHHHHHH\fP であるユニコード (ISO/IEC 10646) 文字 (16 進 1〜8 桁)。
.PD
.RE
.TP
\fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...]
組み込みコマンドの有効/無効を設定します。 シェルは通常はディスクコマンドの前に組み込みコマンドを探しますが、 組み込みコマンドを無効にすると、
シェルの組み込みコマンドと同じ名前を持つディスクコマンドを、 完全なパス名を指定しなくても実行できます。 \fB\-n\fP を用いると、それぞれの
\fIname\fP は無効となります。 それ以外の場合には、\fIname\fP は有効となります。 例えば、シェル組み込みのものでなく
.SM
\fBPATH\fP 上にある \fBtest\fP バイナリを使うには
.if t \f(CWenable -n test\fP.
.if n ``enable -n test''.
を実行します。 \fB\-f\fP オプションは新しい組み込みコマンド \fIname\fP を共有オブジェクト \fIfilename\fP
からロードするという意味です。 これは動的ロードをサポートしているシステムで使えます。 \fB\-d\fP オプションは、以前に \fB\-f\fP
オプションでロードした組み込みコマンドを削除します。 引き数 \fIname\fP が与えられなかった場合や、 \fB\-p\fP オプションが与えられた場合、
シェルの組み込みコマンドのリストが表示されます。 他にオプション引き数が指定されていない場合には、
有効になっているシェル組み込みコマンド全てからなるリストが表示されます。 \fB\-n\fP を与えると、無効にされている組み込みコマンドだけが出力されます。
\fB\-a\fP を与えると、 それぞれ有効かどうかの表示付きで全ての組み込みコマンドが出力されます。 \fB\-s\fP を与えると、出力されるのは POSIX
の\fI特殊\fP組み込みコマンドだけに制限されます。 \fIname\fP がシェル組み込みコマンドでない場合と、
共有オブジェクトからの新しい組み込みコマンドのロードに失敗した場合を除き、 返り値は 0 となります。
.TP
\fBeval\fP [\fIarg\fP ...]
\fIarg\fP を読み込み、1 つのコマンドに結合し、 このコマンドを読み込んで実行します。 その終了ステータスが \fBeval\fP の値として返されます。
\fIargs\fP がない場合や空の引き数しかない場合には \fBeval\fP は 0 を返します。
.TP
\fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]]
\fIcommand\fP が指定されていると、シェルはこのコマンドに置き換えられます。 新しいプロセスは生成されません。 \fIarguments\fP は
\fIcommand\fP に対する引き数となります。 \fB\-l\fP オプションを与えると、シェルは \fIcommand\fP に渡す 0
番目のオプションの先頭にダッシュを設定します。 これは \fIlogin\fP(1) が行う動作です。 \fB\-c\fP オプションを与えると、
\fIcommand\fP は空の環境で実行されます。 \fB\-a\fP を与えると、シェルは実行するコマンドに 0 番目の引き数として \fIname\fP
を渡します。何らかの理由で \fIcommand\fP が実行できない場合には非対話的シェルは終了します。 ただしシェルオプション \fBexecfail\fP
が設定されている場合は終了せず、この場合には偽が返されます。 ファイルが実行できない場合には、対話的シェルは偽を返します。 \fIcommand\fP
が指定されていない場合、任意のリダイレクトはカレントシェルで効果を持ち、 終了ステータスは 0 となります。
リダイレクトのエラーが起きた場合には、終了ステータスは 1 となります。
.TP
\fBexit\fP [\fIn\fP]
ステータス \fIn\fP でシェルを終了させます。 \fIn\fP を省略すると、 終了ステータスは最後に実行したコマンドの終了ステータスとなります。
シェルが終了する前には、
.SM
\fBEXIT\fP に対するトラップが実行されます。
.TP
\fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIword\fP]] ...
.PD 0
.TP
\fBexport \-p\fP
.PD
指定された \fIname\fP には印が付けられ、 これ以降に実行するコマンドの環境に 自動的にエクスポートされるようになります。 \fB\-f\fP
オプションを与えると、 \fIname\fP は関数を参照します。 \fIname\fP を与えなかった場合や、 \fB\-p\fP オプションを与えた場合には、
このシェル内でエクスポートされている全ての名前のリストが出力されます。 \fB\-n\fP
オプションを与えると、指定した変数からエクスポート属性が取り除かれます。 変数名に =\fIword\fP が続くと、変数の値に \fIword\fP
が設定されます。 不正なオプションがあった場合、 \fIname\fP のいずれかが不正なシェル変数名であった場合、 関数でない名前に対して \fB\-f\fP
オプションを与えた場合を除き、 \fBexport\fP は終了ステータス 0 を返します。
.TP
\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-lnr\fP] [\fIfirst\fP] [\fIlast\fP]
.PD 0
.TP
\fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP]
.PD
フィックスコマンド (Fix Command)。 最初の形式では、 \fIfirst\fP から \fIlast\fP
までの範囲のコマンドが履歴リストから選択されます。 \fIfirst\fP と \fIlast\fP には文字列か数値を指定します。
文字列はその文字列で始まる最後のコマンドを表し、 数値は履歴リスト中でのインデックスを表します
(負の値は現在のコマンド番号からのオフセットとして扱われます)。 \fIlast\fP が指定されていない場合、リスト表示の場合には 現在のコマンドが
\fIlast\fP に設定され (したがって
.if n ``fc \-l \-10''
.if t \f(CWfc \-l \-10\fP
で最近のコマンド 10 個が出力されます)、それ以外の場合には \fIfirst\fP が設定されます。 \fIfirst\fP
が指定されていなければ、編集の場合には前のコマンドが \fIfirst\fP に設定され、 リスト表示の場合には \-16 が設定されます。
.sp 1
\fB\-n\fP オプションを与えるとリスト表示でコマンド番号が付きません。 \fB\-r\fP オプションを与えるとコマンドの順序が逆になります。 \fB\-l\fP
オプションを与えると、コマンドは標準出力にリスト表示されます。 それ以外の場合には、これらのコマンドが書かれたファイルに対し、 \fIename\fP
で指定したエディタが起動されます。 \fIename\fP が与えられていない場合は、変数
.SM
\fBFCEDIT\fP の値が使われ、
.SM
\fBFCEDIT\fP も設定されていない場合には
.SM
\fBEDITOR\fP の値が使われます。 どちらの変数も設定されていなければ、
.FN vi
が使われます。 編集が終了すると、編集後のコマンドがエコー表示され、実行されます。
.sp 1
2 番目の形式では、\fIpat\fP の部分をそれぞれ \fIrep\fP で置き換えてから \fIcommand\fP が再実行されます。
これを利用している便利なエイリアスの例として
.if n ``r="fc -s"'',
.if t \f(CWr='fc \-s'\fP,
があります。 これを用いると
.if n ``r cc''
.if t \f(CWr cc\fP
と入力すれば
.if n ``cc''
.if t \f(CWcc\fP
で始まる最も新しいコマンドを実行でき、
.if n ``r''
.if t \f(CWr\fP
と入力すれば直前のコマンドを再実行できます。
.sp 1
最初の形式を用いた場合、不正なオプションがあるか、 \fIfirst\fP または \fIlast\fP が履歴行の範囲外を指定していなければ、返り値は 0
となります。 \fB\-e\fP オプションが与えられた場合、 返り値は最後に実行されたコマンドの返り値となります。
ただし、コマンドの一時ファイルでエラーが起きた場合には返り値は偽 (失敗) となります。 2 番目の形式を用いた場合、
終了ステータスは再実行されたコマンドの終了ステータスとなります。 ただし、 \fIcmd\fP が有効な履歴行を指定していない場合は、 \fBfc\fP は偽
(失敗) を返します。
.TP
\fBfg\fP [\fIjobspec\fP]
\fIjobspec\fP の実行をフォアグラウンドで再開し、これをカレントジョブとします。 \fIjobspec\fP
がない場合、シェルが記録している\fIカレントジョブ\fPが使われます。 返り値はフォアグラウンドで再開されたコマンドの返り値ですが、
ジョブ制御が無効であるときに実行した場合や、 ジョブ制御が有効であっても \fIjobspec\fP が有効なジョブを指定していない場合や
\fIjobspec\fP がジョブ制御なしで実行したジョブを指定している場合には偽となります。
.TP
\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIargs\fP]
\fBgetopts\fP は位置パラメータを解釈するシェルの処理で使います。 \fIoptstring\fP は識別の対象であるオプション文字列です。
ある文字の後にコロンがある場合、 そのオプションは引き数を一つ取ることが期待されます。 引き数は空白でオプション文字と区切られていなければなりません。
コロンと疑問符はオプション文字として使えません。 呼び出されるたびに、 \fBgetopts\fP は次に見つかったオプションをシェル変数 \fIname\fP
に格納し (\fIname\fP が存在しなければ初期化を行います)、 次に処理される引き数のインデックスを変数
.SM
\fBOPTIND\fP
に格納します。
.SM
\fBOPTIND\fP はシェルまたはシェルスクリプトが呼び出されるたびに 1 に初期化されます。
オプションが引き数を必要とする場合には、 \fBgetopts\fP はその引き数を変数
.SM
\fBOPTARG\fP に格納します。 シェルが
.SM
\fBOPTIND\fP を自動的に再設定することはありません。 1 つのシェルが呼び出されている間に別のパラメータの組み合わせを使う場合には、
再度 \fBgetopts\fP を呼び出す前に手動で \fBOPTIND\fP の再設定を行わなければなりません。
.sp 1
オプションの終わりに到達すると、 \fBgetopts\fP は 0 より大きい返り値で終了します。
.SM
\fBOPTIND\fP
にはオプションでない最初の引き数のインデックスが設定され、 \fIname\fP には ? が設定されます。
.sp 1
\fBgetopts\fP は通常位置パラメータを展開しますが、他の引き数が \fIargs\fP に指定されている場合には、 \fBgetopts\fP
は位置パラメータでなくこれらの引き数を解釈対象とします。
.sp 1
\fBgetopts\fP は 2 通りの方法でエラーを報告します。 \fIoptstring\fP の最初の文字がコロンならば、 \fI静かな (silent)\fP
エラー報告が行われます。 通常の動作では、不正なオプションがある場合や オプションの引き数が足りない場合に診断メッセージが出力されます。 変数
.SM
\fBOPTERR\fP に 0 が設定されている場合、 \fIoptstring\fP の最初の文字がコロンでない場合であっても、
エラーメッセージは全く出力されません。
.sp 1
不正なオプションがあった場合、 \fBgetopts\fP は ? を \fIname\fP に設定します。
さらに、静かなモードでない場合にはエラーメッセージが出力され、
.SM
\fBOPTARG\fP が削除されます。 \fBgetopts\fP
が静かなモードであれば、見つかったオプション文字は
.SM
\fBOPTARG\fP に設定され、診断メッセージは出力されません。
.sp 1
必要な引き数が見つからず、かつ \fBgetopts\fP が静かなモードでない場合には、疑問符 (\^\fB?\fP\^) が \fIname\fP に設定され、
.SM
\fBOPTARG\fP が削除され、診断メッセージが出力されます。 \fBgetopts\fP が静かなモードならば、コロン (\^\fB:\fP\^)
が \fIname\fP に設定され、
.SM
\fBOPTARG\fP には見つかったオプション文字が設定されます。
.sp 1
(指定の有無に関係なく) オプションが見つかった場合、 \fBgetopts\fP は真を返します。
オプションの最後に到達した場合や、エラーが起きた場合には、 偽を返します。
.TP
\fBhash\fP [\fB\-lr\fP] [\fB\-p\fP \fIfilename\fP] [\fB\-dt\fP] [\fIname\fP]
\fBhash\fP が実行される度に、 \fB$PATH\fP に含まれるディレクトリの検索を行ってコマンド \fIname\fP の完全なパス名を調べ、
その結果を記憶します。 それまでに記憶されていたパス名は捨てられます。 \fB\-p\fP オプションが指定されると、パス検索は実行されず、
\fIfilename\fP がそのコマンドの完全なファイル名として使われます。 \fB\-r\fP オプションを与えると、シェルは記憶しているパス名を全て忘れます。
\fB\-d\fP オプションを与えると、シェルは各 \fIname\fP について記憶しているパス名を忘れます。 \fB\-t\fP オプションを与えると、\fIname\fP
に対応する完全なファイル名が表示されます。 \fB\-t\fP に複数の \fIname\fP 引き数が指定された場合、 記憶されている完全なファイル名の前に
\fIname\fP が表示されます。 \fB\-l\fP オプションを与えると、入力として再利用できる形で出力されます。 引き数が与えられていない場合や、\fB\-l\fP
だけが与えられた場合は、 記憶しているコマンドに関する情報が出力されます。 \fIname\fP が見つからない場合と不正なオプションが与えられた場合を除き、
返却ステータスは真となります。
.TP
\fBhelp\fP [\fB\-dms\fP] [\fIpattern\fP]
組み込みコマンドのヘルプ情報を表示します。 \fIpattern\fP が指定された場合には、 \fBhelp\fP は \fIpattern\fP
にマッチする全てのコマンドに関する詳しいヘルプを出力します。 指定されなかった場合には、 全ての組み込みコマンドと制御構造についての説明が出力されます。
.RS
.PD 0
.TP
\fB\-d\fP
\fIpattern\fP それぞれの短い説明を表示します。
.TP
\fB\-m\fP
\fIpattern\fP それぞれの説明を manpage 風のフォーマットで表示します。
.TP
\fB\-s\fP
\fIpattern\fP それぞれの短い書式のみを表示します。
.PD
.PP
\fIpattern\fP にマッチするコマンドが全くない場合を除き、返却ステータスは 0 です。
.RE
.TP
\fBhistory [\fP\fIn\fP\fB]\fP
.PD 0
.TP
\fBhistory\fP \fB\-c\fP
.TP
\fBhistory \-d\fP \fIoffset\fP
.TP
\fBhistory\fP \fB\-anrw\fP [\fIfilename\fP]
.TP
\fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg ...\fP]
.TP
\fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg ...\fP]
.PD
オプションがない場合には、行番号付きでコマンド履歴を表示します。 \fB*\fP 付きでリスト表示されている行は変更された行です。 引き数 \fIn\fP
を指定すると、最新の \fIn\fP 行だけがリスト表示されます。 シェル変数
.SM
\fBHISTTIMEFORMAT\fP
に空でない値が設定されると、履歴エントリを表示するときに タイムスタンプを表示するための \fIstrftime\fP(3) の書式文字列 として使われます。
タイムスタンプと履歴行の間には空白は表示されません。 \fIfilename\fP が指定されている場合、 履歴ファイルの名前として使われます。
指定されていない場合には
.SM
\fBHISTFILE\fP の値が使われます。指定された場合、オプションは以下の意味を持ちます:
.RS
.PD 0
.TP
\fB\-c\fP
全てのエントリを削除し、履歴リストをクリアします。
.TP
\fB\-d\fP \fIoffset\fP
\fIoffset\fP 番目にある履歴エントリを削除します。
.TP
\fB\-a\fP
「新しい」履歴行 (\fBbash\fP の現在のセッションの開始以降に入力された履歴行) を履歴ファイルに追加します。
.TP
\fB\-n\fP
まだ履歴ファイルから読み込んでいない履歴行を 現在の履歴リストに読み込みます。 読み込まれるのは、\fBbash\fP の現在のセッションの開始以降に
履歴ファイルに追加された行です。
.TP
\fB\-r\fP
履歴ファイルの内容を読み込み、これらを現在の履歴として用います。
.TP
\fB\-w\fP
現在の履歴を履歴ファイルに書き込みます。履歴ファイルの内容は上書きされます。
.TP
\fB\-p\fP
後に続く \fIargs\fP に対して履歴置換を行い、 その結果を標準出力に表示します。 この結果は履歴リストには格納されません。
通常の履歴展開が行われないようにするため、 \fIarg\fP はそれぞれクォートしなければなりません。
.TP
\fB\-s\fP
\fIargs\fP を 1 つのエントリとして履歴リストに格納します。 履歴リストの最後のコマンドは、 \fIargs\fP が追加される前に削除されます。
.PD
.PP
.SM
\fBHISTTIMEFORMAT\fP 変数が設定されていると、履歴エントリのタイムスタンプの情報は、
履歴のコメント文字を付けて履歴ファイルに書き込まれます。 履歴ファイルを読み込むときに、履歴のコメント文字で始まり直後に数字が続く行は、
直前の履歴行のタイムスタンプとして解釈されます。 不正なオプションがある場合、 履歴ファイルの読み書き時にエラーが起きた場合、 \fB\-d\fP
オプションの引き数として不正な \fIoffset\fP の値が与えられた場合、 \fB\-p\fP オプションの引き数として与えられた履歴展開が失敗した場合を除き、
返り値は 0 になります。
.RE
.TP
\fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP ... ]
.PD 0
.TP
\fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP ... ]
.PD
最初の形式を実行すると、アクティブなジョブがリスト表示されます。 オプションは以下の意味を持ちます:
.RS
.PD 0
.TP
\fB\-l\fP
通常の情報に加えて、プロセス ID をリスト表示します。
.TP
\fB\-n\fP
ユーザがステータスを最後に通知されて以降に、 ステータスの変更があったジョブに関する情報だけを表示します。
.TP
\fB\-p\fP
そのジョブが属するプロセスグループのリーダーのプロセス ID だけを表示します。
.TP
\fB\-r\fP
実行中のジョブだけを出力します。
.TP
\fB\-s\fP
停止中のジョブだけを出力します。
.PD
.PP
\fIjobspec\fP が指定された場合、 そのジョブに関する情報だけが出力されます。 不正なオプションがある場合や、不正な \fIjobspec\fP
が与えられた場合を除き、返却ステータスは 0 です。
.PP
\fB\-x\fP オプションが指定されると、 \fBjobs\fP は \fIcommand\fP や \fIargs\fP 中の \fIjobspec\fP
を対応するプロセスのグループ ID で置き換え、 \fIcommand\fP に \fIargs\fP を与えて実行し、その終了ステータスを返します。
.RE
.TP
\fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] [\fIpid\fP | \fIjobspec\fP] ...
.PD 0
.TP
\fBkill\fP \fB\-l\fP [\fIsigspec\fP | \fIexit_status\fP]
.PD
\fIsigspec\fP または \fIsignum\fP で指定されたシグナルを、 \fIpid\fP または \fIjobspec\fP で指定されたプロセスに送ります。
\fIsigspec\fP は、
.SM
\fBSIGKILL\fP のようなシグナル名 (先頭の
.SM
\fBSIG\fP
は省略可能)、またはシグナルの番号です。 \fIsignum\fP はシグナルの番号です。 \fIsigspec\fP が存在しない場合には、
.SM
\fBSIGTERM\fP が指定されたものとします。 引き数に \fB\-l\fP を与えるとシグナル名がリスト表示されます。 \fB\-l\fP
と同時に引き数を与えると、 引き数に対応するシグナルの名前がリスト表示され、 返却ステータスは 0 となります。 \fB\-l\fP に対する引き数
\fIexit_status\fP は、 シグナル番号、またはシグナルによって終了させられた プロセスの終了ステータスを指定する数です。 少なくとも 1
つのシグナルを正常に送れた場合、 \fBkill\fP は真を返します。 エラーが起きた場合や不正なオプションがあった場合には、 \fBkill\fP
は偽を返します。
.TP
\fBlet\fP \fIarg\fP [\fIarg\fP ...]
各 \fIarg\fP は評価を行う算術式です
.SM
(\fB算術式展開\fP を参照)。 最後の \fIarg\fP を評価した結果が 0 であれば、
\fBlet\fP は 1 を返します。 それ以外の場合には 0 が返されます。
.TP
\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] ...]
それぞれの引き数に対して \fIname\fP という名前のローカル変数が生成され、 \fIvalue\fP が代入されます。 \fIoption\fP には、
\fBdeclare\fP コマンドに使えるオプションが全て使えます。 関数内で \fBlocal\fP を使った場合、この変数 \fIname\fP
の可視スコープは、この関数とこの関数の子に制限されます。 オペランドがない場合、 \fBlocal\fP はローカル変数の一覧を標準出力に出力します。
関数の内部以外で \fBlocal\fP を使うとエラーになります。 \fBlocal\fP が関数の外部で使われた場合、 不正な \fIname\fP
が与えられた場合、 \fIname\fP が読み取り専用の変数であった場合以外は、 \fBlocal\fP の返却ステータスは 0 となります。
.TP
\fBlogout\fP
ログインシェルを終了します。
.TP
\fBmapfile\fP [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP]
.PD 0
.TP
\fBreadarray\fP [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP]
.PD
標準入力の各行を配列変数 \fIarray\fP に読み込みます。 \fB\-u\fP オプションが指定されたときは、ファイル・ディスクリプター \fIfd\fP
から読み込みます。 変数
.SM
\fBMAPFILE\fP がデフォルトの \fIarray\fP です。
オプションが指定された場合、以下の意味を持ちます:
.RS
.PD 0
.TP
\fB\-n\fP
最大 \fIcount\fP 行をコピーします。\fIcount\fP が 0 であれば、全ての行をコピーします。
.TP
\fB\-O\fP
\fIarray\fP のインデックス \fIorigin\fP から代入を始めます。デフォルトのインデックスは 0 です。
.TP
\fB\-s\fP
最初の \fIcount\fP 行を読み捨てます。
.TP
\fB\-t\fP
読み込んだ各行の末尾にある改行文字を削除します。
.TP
\fB\-u\fP
標準入力の代わりにファイル・ディスクリプター \fIfd\fP から行を読み込みます。
.TP
\fB\-C\fP
\fIquantum\fP 行が読み込まれるごとに \fIcallback\fP を評価します。\fB\-c\fP オプションで \fIquantum\fP を指定します。
.TP
\fB\-c\fP
\fIcallback\fP を呼び出す間隔の行数を指定します。
.PD
.PP
\fB\-c\fP なしで \fB\-C\fP が指定されたとき、デフォルトの間隔は 5000 です。 \fIcallback\fP が評価されるとき、
次に代入される配列要素のインデックスと、 その要素に代入される行が、引き数として与えられます。 \fIcallback\fP は、行が読み込まれてから
配列の要素に代入されるまでの間に評価されます。
.PP
始点が明示的に指定されない場合、\fBmapfile\fP は値を代入する前に \fIarray\fP をクリアします。
.PP
\fBmapfile\fP は、 不正なオプションやオプション引き数が指定された場合や、 \fIarray\fP が不正か代入できない場合や、 \fIarray\fP
がインデックスによる配列でない場合でなければ、 成功の状態を返します。
.RE
.TP
\fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP]
ディレクトリスタックからエントリを削除します。 引き数がない場合には、スタック先頭のディレクトリが削除され、 新しく先頭となったディレクトリへの
\fBcd\fP が実行されます。 引き数が指定された場合には、これは以下の意味を持ちます:
.RS
.PD 0
.TP
\fB\-n\fP
スタックからディレクトリを削除する際に、 通常のディレクトリ変更を行いません。 したがって、スタックだけが操作されます。
.TP
\fB+\fP\fIn\fP
\fBdirs\fP で表示されるリストの左から数えて \fIn\fP 番目のエントリを削除します。 エントリは 0 から数えます。例えば、
.if n ``popd +0''
.if t \f(CWpopd +0\fP
は最初のディレクトリを削除し、
.if n ``popd +1''
.if t \f(CWpopd +1\fP
は 2 番目のディレクトリを削除します。
.TP
\fB\-\fP\fIn\fP
\fBdirs\fP で表示されるリストの右から数えて \fIn\fP 番目のエントリを削除します。 エントリは 0 から数えます。例えば、
.if n ``popd -0''
.if t \f(CWpopd -0\fP
は最後のディレクトリを削除し、
.if n ``popd -1''
.if t \f(CWpopd -1\fP
は最後の 1 つ前のディレクトリを削除します。
.PD
.PP
\fBpopd\fP コマンドが成功した場合、 \fBdirs\fP も実行され、返却ステータスは 0 となります。 \fBpopd\fP
が偽を返すのは、不正なオプションがあった場合、 ディレクトリスタックが空の場合、 ディレクトリスタックの存在しないエントリが指定された場合、
ディレクトリ変更に失敗した場合です。
.RE
.TP
\fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP]
\fIarguments\fP を整形して標準出力に書き出します。 フォーマットは \fIformat\fP で制御します。 \fB\-v\fP
オプションが与えられると、標準出力に書き出す代わりに、 変数 \fIvar\fP に代入されます。
.sp 1
\fIformat\fP は 3 つのタイプのオブジェクトを含む文字列です。 3 つのオブジェクトとは、普通の文字 (そのまま標準出力にコピーされる)、
文字エスケープシーケンス (変換されて標準出力にコピーされる)、 表示フォーマット指定 (\fIformat\fP の後に続く各引き数 \fIargument\fP
の表示を行う)、です。 \fIprintf\fP(1) 標準のフォーマット指定以外に、以下の拡張フォーマットが使えます。
.RS
.PD 0
.TP
\fB%b\fP
\fBprintf\fP は対応する \fIargument\fP 中の バックスラッシュのエスケープシーケンスを展開します。 ただし、\fB\ec\fP
で出力を終了し、\fB\e\(aq\fP, \fB\e"\fP, \fB\e?\fP のバックスラッシュは削られず、 \fB\e0\fP で始まる 8
進数のエスケープシーケンスは 4 桁までです。
.TP
\fB%q\fP
\fBprintf\fP は対応する \fIargument\fP をシェルの入力として再利用できるフォーマットで出力します。
.TP
\fB%(\fP\fIdatefmt\fP\fB)T\fP
\fBprintf\fP は \fIdatefmt\fP を \fIstrftime\fP(3) の書式文字列として使って日付と時刻の文字列を出力します。 対応する
\fIargument\fP は、紀元 (1970年 1 月 1 日 00:00:00 UTC) からの秒数を表す整数値です。\fIargument\fP には
2 つの特別な値が使えます。 \-1 は現在時刻を表します。\-2 はシェルが起動した時刻を表します。
.PD
.PP
文字列でないフォーマット指定に対する引き数は、C の定数として扱われます。 ただし、先頭のプラスとマイナスの記号は許されます。
また、先頭の文字がシングルクォートやダブルクォートであれば、 続く文字の ASCII コードの値が引き数の値となります。
.PP
\fIformat\fP は必要に応じて再利用され、 全ての \fIarguments\fP を処理します。 与えられたよりも多くの \fIarguments\fP を
\fIformat\fP が必要とする場合、余分のフォーマット指定は、 0 と空文字列のうち、適切な方が指定されたかのように動作します。
成功した場合の返り値は 0 で、失敗した場合の返り値は 0 以外です。
.RE
.TP
\fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP]
.PD 0
.TP
\fBpushd\fP [\fB\-n\fP] [\fIdir\fP]
.PD
ディレクトリをディレクトリのスタックに追加するか、 スタックをローテートさせます。 このとき、新しいスタックの最も上にあるものを
カレントの作業ディレクトリにします。 引き数を与えなければ、 一番上の 2 つのディレクトリを交換し、0 を返します。
ただし、ディレクトリスタックが空の場合を除きます。 引き数を与えた場合には、以下の意味を持ちます:
.RS
.PD 0
.TP
\fB\-n\fP
ディレクトリをスタックに追加したときに、 通常のディレクトリ変更を行いません。 したがって、スタックだけが操作されます。
.TP
\fB+\fP\fIn\fP
スタックをローテートさせ、\fIn\fP 番目のディレクトリを一番上にします。 このとき \fBdirs\fP が表示するリストは左から数え始め、その左端は 0
となります。
.TP
\fB\-\fP\fIn\fP
スタックをローテートさせ、\fIn\fP 番目のディレクトリを一番上にします。 このとき \fBdirs\fP が表示するリストは右から数え始め、その右端は 0
となります。
.TP
\fIdir\fP
\fIdir\fP をディレクトリスタックの一番上に追加し、 そのディレクトリを新しいカレントの作業ディレクトリにします。
.PD
.PP
\fBpushd\fP コマンドが成功すると、 \fBdirs\fP コマンドも実行されます。 2 番目の形式を使った場合、 \fIdir\fP への cd
が失敗しなければ、 \fBpushd\fP は 0 を返します。 最初の形式を使った場合には、 ディレクトリスタックが空の場合、
ディレクトリスタックの存在しない要素が指定された場合、 指定された新しいカレントディレクトリへの ディレクトリ変更が失敗した場合以外は、
\fBpushd\fP は基本的には 0 を返します。
.RE
.TP
\fBpwd\fP [\fB\-LP\fP]
現在の作業ディレクトリの絶対パス名を出力します。 \fB\-P\fP オプションが指定された場合や、組み込みコマンド \fBset\fP の \fB\-o
physical\fP オプションが有効になっている場合には、 シンボリックリンクを展開したパス名が出力されます。 \fB\-L\fP オプションを使うと、
出力されるパス名にはシンボリックリンクが含まれているかもしれません。 カレントディレクトリの名前を読む際にエラーが起きたり、
不正なオプションが指定されたりしなければ、返却ステータスは 0 となります。
.TP
\fBread\fP [\fB\-ers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-u\fP \fIfd\fP] [\fIname\fP ...]
標準入力、 または \fB\-u\fP オプションの引き数として指定されたファイル・ディスクリプター \fIfd\fP から 1 行を読み込み、最初の単語を最初の
\fIname\fP に代入し、2 番目の単語を 2 番目の \fIname\fP に代入します。以降も同様です。 余った単語とそれらの間の区切り文字は、最後の
\fIname\fP に代入されます。 \fIname\fP よりも標準入力から読み込んだ単語の方が少ない場合には、 余っている \fIname\fP
には空文字列が値として代入されます。
.SM
\fBIFS\fP 中の文字が、行を単語に分割するために使われます。 バックスラッシュ文字 (\fB\e\fP)
を使うと、 次に読み込んだ文字の特殊な意味を消したり、行を連結したりできます。 オプションが与えられていれば、以下の意味を持ちます:
.RS
.PD 0
.TP
\fB\-a \fP\fIaname\fP
単語を配列変数 \fIaname\fP にインデックス順に代入します。インデックスは 0 から始まります。 新しい値が代入される前に \fIaname\fP
は削除されます。他の \fIname\fP 引き数は無視されます。
.TP
\fB\-d \fP\fIdelim\fP
改行ではなく、\fIdelim\fP の最初の文字が、入力行を終了するために使われます。
.TP
\fB\-e\fP
標準入力を端末から読み込む場合、 \fBreadline\fP (前述の
.SM
\fBREADLINE ライブラリ\fP のセクションを参照)
を使って行を取得します。 readline は現在の (行編集がそれまで有効になっていなければデフォルトの) 編集設定を使います。
.TP
\fB\-i \fP\fItext\fP
行を取得するのに \fBreadline\fP が使われるとき、入力を開始する前に編集バッファに \fItext\fP が置かれます。
.TP
\fB\-n \fP\fInchars\fP
組み込みコマンド \fBread\fP は、 入力行全体が読み込まれるのを待たず、 \fInchars\fP 文字を読み込んだ時点で戻ります。
ただし、\fInchars\fP 文字が読み込まれる前に区切り文字が現われたときは、 区切り文字を優先します。
.TP
\fB\-N \fP\fInchars\fP
入力行全体が読み込まれるのを待たず、 \fInchars\fP 文字を読み込んだ時点で戻ります。 ただし、入力に EOF が現れたときや、 \fBread\fP
がタイムアウトになったときを除きます。 入力に区切り文字が現れても特別扱いはせず、 \fInchars\fP 文字を読み込むまでは \fBread\fP
が戻ることはありません。
.TP
\fB\-p \fP\fIprompt\fP
入力を読み込もうとする前に標準エラー出力に \fIprompt\fP を表示します。 末尾に改行は付きません。
プロンプトが表示されるのは、入力を端末から読み込む場合だけです。
.TP
\fB\-r\fP
バックスラッシュはエスケープ文字として作用しません。 バックスラッシュは行の一部とみなされます。 特に、バックスラッシュと改行の組み合わせを使って
複数の行を接続することはできません。
.TP
\fB\-s\fP
静かな (silent) モード。端末に入力が行われても、文字はエコーされません。
.TP
\fB\-t \fP\fItimeout\fP
入力行全体が \fItimeout\fP 秒以内で読み込まれない場合、 \fBread\fP をタイムアウトさせて、失敗の状態を返します。 \fItimeout\fP
は小数部を持つ十進数でもかまいません。 このオプションは、 \fBread\fP が入力を端末やパイプ、その他の特殊ファイルから
読み込んでいる場合にのみ効果があります。 通常のファイルから読み込んでいる場合には影響ありません。 \fItimeout\fP が 0
のときは、\fBread\fP は指定したファイル・ディスクリプター から読み込める状態であれば成功の状態を返し、そうでなければ失敗の状態を返します。
タイムアウト時間を超えた場合、終了ステータスは 128 より大きい値になります。
.TP
\fB\-u \fP\fIfd\fP
ファイル・ディスクリプター \fIfd\fP から入力を読み込みます。
.PD
.PP
\fIname\fP が全く与えられていない場合、読み込まれた行は変数
.SM
\fBREPLY\fP に代入されます。 ファイル末尾に到達した場合、
\fBread\fP がタイムアウトした場合 (この場合には終了ステータスは 128 より大きい値になります)、 \fB\-u\fP
の引き数として不正なファイル・ディスクリプターが指定した場合以外は、 終了コードは 0 です。
.RE
.TP
\fBreadonly\fP [\fB\-aAf\fP] [\fB\-p\fP] [\fIname\fP[=\fIword\fP] ...]
.PD
指定された \fIname\fP に読み込み専用の印を付けます。 それ以降は、これらの \fIname\fP の値を変更することはできません。 \fB\-f\fP
オプションを与えた場合、\fIname\fP に対応する関数に同様の印が付きます。 \fB\-a\fP オプションを与えると、配列変数だけが対象となります。
\fB\-A\fP オプションを与えると、連想配列変数だけが対象となります。 両方のオプションを与えると、 \fB\-A\fP が優先されます。 \fIname\fP
引き数が全く与えられてない場合、または \fB\-p\fP オプションが与えられた場合、読み込み専用の名前全ての一覧が出力されます。
ほかのオプションを合わせて指定すると、出力を読み込み専用の名前の一部に限定します。 \fB\-p\fP オプションを使うと、
入力として再利用できるようなフォーマットで出力が行われます。 変数名に =\fIword\fP が続くと、変数の値に \fIword\fP が設定されます。
返却ステータスは基本的に 0 ですが、 無効なオプションがあった場合、 \fIname\fP のいずれかが有効なシェル変数名でなかった場合、 \fB\-f\fP
オプションの際に関数でない \fIname\fP を与えた場合は除きます。
.TP
\fBreturn\fP [\fIn\fP]
指定した返り値 \fIn\fP で関数を終了させます。 \fIn\fP を省略すると、返却ステータスは 関数内で最後に実行したコマンドの返却ステータスになります。
関数の外側で使われているが、 \fB.\fP (\fBsource\fP) コマンドによるスクリプトの実行中である場合、 シェルはそのスクリプトの実行を止め、
\fIn\fP またはスクリプト内で最後に実行されたコマンドの終了ステータスを スクリプトの終了ステータスとして返します。 関数の外側で \fB.\fP\^
によるスクリプトの実行中以外に使われた場合、 返却ステータスは偽となります。 関数やスクリプトから実行が戻る前に、 \fBRETURN\fP トラップ
に設定されたコマンドが実行されます。
.TP
\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fIarg\fP ...]
.PD 0
.TP
\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fIarg\fP ...]
.PD
オプションなしの場合は、シェル変数全ての名前と値の組が表示されます。 表示は、現在設定されている変数を設定や再設定をする入力
として再利用できるフォーマットで行われます。 読み込み専用の変数は再設定できません。 \fIposix モード\fP ではシェル変数だけが表示されます。
出力は現在のロケールに従ってソートされます。 オプションが指定されている場合、 オプションはシェルの属性を設定または解除します。
オプションが処理された後に残っている引き数があれば、 これは位置パラメータの値として扱われ、 \fB$1\fP, \fB$2\fP, \fB...\fP \fB$\fP\fIn\fP
の順に代入されます。 オプションが指定されていれば、以下の意味を持ちます:
.RS
.PD 0
.TP 8
\fB\-a\fP
値を変更したり新規に設定したりした変数および関数が、 (これ以降に実行するコマンドの) 環境として 自動的にエクスポートされます。
.TP 8
\fB\-b\fP
終了したバックグラウンドジョブのステータス報告を、 次のプライマリプロンプトの前ではなく、即座に行います。 これはジョブ制御が有効な場合に限り有効です。
.TP 8
\fB\-e\fP
\fIパイプライン\fP (1 つの \fI単純なコマンド\fP からなるものでもよい)、 括弧で囲まれた \fIサブシェル\fP のコマンド、 ブレース (前述の
.SM
\fBシェルの文法\fP を参照) で囲まれたコマンドのリストの一部として実行されたコマンドの 1 つ が 0
でないステータスで終了した場合、即座に終了します。 ただし、失敗したコマンドが、キーワード \fBwhile\fP または \fBuntil\fP
の直後のコマンドの一部である場合、予約語 \fBif\fP または \fBelif\fP に続く条件式の一部である場合、 \fB&&\fP または \fB||\fP
によるコマンドのリストの一部である場合 (最後の \fB&&\fP や \fB||\fP の後のコマンドを除く)、 パイプラインの中の最後のコマンド以外である、
コマンドの返り値が \fB!\fP で反転されている場合、のいずれかであれば、シェルは終了しません。 \fBERR\fP
に対するトラップが設定されていれば、シェルが終了する前に実行されます。 このオプションはシェルの環境と各サブシェルの環境に別々に適用され (前述の
.SM
\fBコマンド実行環境\fP を参照)、 サブシェルはサブシェル内の全てのコマンドを実行する前に終了するかもしれません。
.TP 8
\fB\-f\fP
パス名展開を無効にします。
.TP 8
\fB\-h\fP
実行時に参照できるようにコマンドの位置を記憶します。 これはデフォルトで有効になっています。
.TP 8
\fB\-k\fP
コマンド名の前にある代入文だけでなく、 引数として指定された全て代入文も、 そのコマンドに対する環境変数に追加されます。
.TP 8
\fB\-m\fP
監視モード。ジョブ制御は有効になります。ジョブ制御 (前述の
.SM
\fBジョブ制御\fP セクションを参照)
をサポートしているシステム上の対話的シェルでは、 このオプションはデフォルトで有効です。 別のプロセスグループで実行されたバックグラウンドプロセスと、
これらの終了ステータスが書かれた行が、プロセスの終了時に表示されます。
.TP 8
\fB\-n\fP
コマンドを読み込みますが実行はしません。 これを使うとシェルスクリプトの文法エラーをチェックできます。 このオプションは対話的シェルでは無視されます。
.TP 8
\fB\-o \fP\fIoption\-name\fP
\fIoption\-name\fP には、以下のいずれかを指定できます:
.RS
.TP 8
\fBallexport\fP
\fB\-a\fP と同じです。
.TP 8
\fBbraceexpand\fP
\fB\-B\fP と同じです。
.TP 8
\fBemacs\fP
emacs 形式のコマンド行編集インタフェースを使います。 これはシェルが対話的な場合には、デフォルトで有効です。 ただし、
\fB\-\-noediting\fP オプション付きでシェルを実行した場合は除きます。 これは、\fBread \-e\fP での編集インタフェースにも影響します。
.TP 8
\fBerrexit\fP
\fB\-e\fP と同じです。
.TP 8
\fBerrtrace\fP
\fB\-E\fP と同じです。
.TP 8
\fBfunctrace\fP
\fB\-T\fP と同じです。
.TP 8
\fBhashall\fP
\fB\-h\fP と同じです。
.TP 8
\fBhistexpand\fP
\fB\-H\fP と同じです。
.TP 8
\fBhistory\fP
コマンド履歴を有効にします。コマンド履歴については
.SM
\fB履歴\fP セクションで説明しています。
このオプションは、対話的シェルではデフォルトで有効です。
.TP 8
\fBignoreeof\fP
シェルコマンドの
.if t \f(CWIGNOREEOF=10\fP
.if n ``IGNOREEOF=10''
を実行した場合と同じ効果を持ちます (前述の \fBシェル変数\fP を参照)。
.TP 8
\fBkeyword\fP
\fB\-k\fP と同じです。
.TP 8
\fBmonitor\fP
\fB\-m\fP と同じです。
.TP 8
\fBnoclobber\fP
\fB\-C\fP と同じです。
.TP 8
\fBnoexec\fP
\fB\-n\fP と同じです。
.TP 8
\fBnoglob\fP
\fB\-f\fP と同じです。
.TP 8
\fBnolog\fP
現在は無視されます。
.TP 8
\fBnotify\fP
\fB\-b\fP と同じです。
.TP 8
\fBnounset\fP
\fB\-u\fP と同じです。
.TP 8
\fBonecmd\fP
\fB\-t\fP と同じです。
.TP 8
\fBphysical\fP
\fB\-P\fP と同じです。
.TP 8
\fBpipefail\fP
設定されている場合、パイプラインの返り値は、 0 以外のステータスで終了した最後の (一番右の) コマンドの値になります。
パイプラインの全てのコマンドが成功の状態で終了すると 0 になります。 このオプションは、デフォルトで無効です。
.TP 8
\fBposix\fP
\fBbash\fP の動作のうち、デフォルトの振舞いが POSIX 標準と異なる部分を、POSIX 標準に準拠するように変更します (\fIposix
モード\fP)。
.TP 8
\fBprivileged\fP
\fB\-p\fP と同じです。
.TP 8
\fBverbose\fP
\fB\-v\fP と同じです。
.TP 8
\fBvi\fP
vi 形式のコマンド行編集インタフェースを使います。 これは、\fBread \-e\fP での編集インタフェースにも影響します。
.TP 8
\fBxtrace\fP
\fB\-x\fP と同じです。
.sp .5
.PP
\fIoption\-name\fP なしで \fB\-o\fP オプションを与えた場合、現在のオプションが出力されます。 \fIoption\-name\fP なしで
\fB+o\fP オプションを与えた場合、現在のオプション設定を再生成する \fBset\fP コマンドの列が標準出力に出力されます。
.RE
.TP 8
\fB\-p\fP
\fI特権 (privileged)\fP モードを有効にします。 このモードでは
.SM
\fB$ENV\fP と
.SM
\fB$BASH_ENV\fP
ファイルは処理されず、シェル関数は環境から継承されず、
.SM
\fBSHELLOPTS\fP,
.SM
\fBBASHOPTS\fP,
.SM
\fBCDPATH\fP,
.SM
\fBGLOBIGNORE\fP 環境変数は定義されていても無視されます。 実ユーザ (グループ) ID
と異なる実効ユーザ (グループ) ID でシェルが起動され、 かつ \fB\-p\fP オプションが与えられていない場合、 これらの動作が行われ、実効ユーザ
ID には実ユーザ ID が設定されます。 起動時に \fB\-p\fP オプションが与えられた場合、 実効ユーザ ID は再設定されません。
このオプションを無効にすると、 実効ユーザ ID と実効グループ ID には、 実ユーザ ID と 実グループ ID が設定されます。
.TP 8
\fB\-t\fP
コマンドを 1 つ読み込み、実行してから終了します。
.TP 8
\fB\-u\fP
パラメータ展開の実行中に、特殊パラメータ "@" と "*" 以外で 設定されていない変数やパラメータをエラーとして扱います。
設定されていない変数やパラメータを展開しようとした場合、 シェルはエラーメッセージを出力します。 シェルが対話的でなければ、0
でないステータスで終了します。
.TP 8
\fB\-v\fP
シェルの入力行を、読み込んだ際に表示します。
.TP 8
\fB\-x\fP
\fI単純なコマンド\fP、\fBfor\fP コマンド、\fBcase\fP コマンド、 \fBselect\fP コマンド、算術 \fBfor\fP
コマンドをそれぞれ展開した後、
.SM
\fBPS4\fP を展開した値を表示し、その後にそのコマンドと展開した引き数や、
結び付いた単語のリストを表示します。
.TP 8
\fB\-B\fP
シェルはブレース展開 (前述の \fBブレース展開\fP を参照) を実行します。これはデフォルトで有効です。
.TP 8
\fB\-C\fP
設定されている場合、 \fBbash\fP はリダイレクト演算子 \fB>\fP, \fB>&\fP, \fB<>\fP
で既存のファイルを上書きしません。 上書きができるのは、リダイレクト演算子 \fB>|\fP を \fB>\fP の代わりに使ったときです。
.TP 8
\fB\-E\fP
設定されている場合、\fBERR\fP のトラップは、 シェル関数、コマンド置換、サブシェル環境で実行されるコマンド に継承されます。
通常、このような場面では \fBERR\fP のトラップは継承されません。
.TP 8
\fB\-H\fP
\fB!\fP 形式の履歴置換を有効にします。 このオプションは、シェルが対話的なときにはデフォルトで有効です。
.TP 8
\fB\-P\fP
設定されている場合、 \fBcd\fP のような現在の作業ディレクトリを変更するコマンドを実行するときに、 シェルはシンボリックリンクを辿りません。
代わりに物理的ディレクトリ構造が使われます。 デフォルトでは、 \fBbash\fP がカレントディレクトリを変更するコマンドを実行する際には、
ディレクトリの論理的な接続が辿られます。
.TP 8
\fB\-T\fP
設定されている場合、\fBDEBUG\fP と \fBRETURN\fP のトラップは、 シェル関数、コマンド置換、サブシェル環境で実行されるコマンド
に継承されます。 通常、このような場面では \fBDEBUG\fP と \fBRETURN\fP のトラップは継承されません。
.TP 8
\fB\-\-\fP
このオプションの後に引き数が続いていない場合には、 位置パラメータの設定が取り消されます。 引き数が続いている場合には、位置パラメータに \fIarg\fP
が設定されます。 \fIarg\fP に \fB\-\fP で始まるものが含まれていても、 オプションではなく位置パラメータとして扱われます。
.TP 8
\fB\-\fP
オプションの終わりを示します。 残りの \fIarg\fP は全て位置パラメータに代入されます。 \fB\-x\fP オプションと \fB\-v\fP
オプションは無効になります。 \fIarg\fP がない場合には、位置パラメータの内容は変化しません。
.PD
.PP
特に断らない限り、各オプションはデフォルトで無効になっています。 \- の代わりに + を使うと、これらのオプションは無効になります。
オプションはシェルを起動する際の引き数としても指定できます。 現在のオプションの集合は、 \fB$\-\fP で知ることができます。
不正なオプションが無ければ、終了ステータスは必ず真となります。
.RE
.TP
\fBshift\fP [\fIn\fP]
\fIn\fP+1 ... からの位置パラメータの名前を変え、 \fB$1\fP \fB...\fP とします。 \fB$#\fP から \fB$#\fP\-\fIn\fP+1
までの数字で表される パラメータは unset されます。 \fIn\fP は 0 以上 \fB$#\fP 以下の数でなければなりません。 \fIn\fP が 0
ならば、どのパラメータも変更されません。 \fIn\fP が与えられない場合には、1 が指定されたものとみなされます。 \fIn\fP が \fB$#\fP
より大きい場合、位置パラメータは変化しません。 \fIn\fP が \fB$#\fP より大きい場合や 0 より小さい場合には、 返却ステータスは 0
より大きい数になります。 それ以外の場合には 0 になります。
.TP
\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...]
シェルのオプション動作を制御する変数の値をトグルさせます。 オプションがない場合や、 \fB\-p\fP オプションが指定されている場合には、
設定可能なオプション全てのリストが表示されます。 表示の際には、それぞれが設定されているかどうかも示されます。
オプションの表示は、入力として再利用できるフォーマットで行われます。 その他のオプションは、以下の意味を持っています:
.RS
.PD 0
.TP
\fB\-s\fP
\fIoptname\fP をそれぞれ有効にします (設定します)。
.TP
\fB\-u\fP
\fIoptname\fP をそれぞれ無効にします (設定解除します)。
.TP
\fB\-q\fP
通常の出力を止めます (静かなモード)。 返却ステータスは \fIoptname\fP が設定されているかどうかを示します。 複数の \fIoptname\fP
引き数と \fB\-q\fP が指定されている場合には、 全ての \fIoptnames\fP が有効であるときに返却ステータスが 0 となります。
それ以外のときには、0 でない値となります。
.TP
\fB\-o\fP
\fIoptname\fP の値を、組み込みコマンド \fBset\fP の \fB\-o\fP オプションで定義されているものに制限します。
.PD
.PP
引き数 \fIoptname\fP なしで \fB\-s\fP オプションまたは \fB\-u\fP オプションを使った場合、それぞれ設定されているもの、
または設定されていないものだけに表示が限定されます。 特に断らない限り、\fBshopt\fP オプションは デフォルトで無効 (設定解除) になっています。
.PP
オプションをリスト表示したときの返却ステータスは、 全ての \fIoptnames\fP が有効になっている場合は 0 となります。 それ以外の場合には 0
でない値となります。 設定または設定取り消しのオプションのときには、 \fIoptname\fP が不正なシェルオプションでなければ、 返却ステータスは 0
となります。
.PP
\fBshopt\fP オプションのリストを以下に示します:
.if t .sp .5v
.if n .sp 1v
.PD 0
.TP 8
\fBautocd\fP
設定されている場合、ディレクトリの名前のコマンド名は、 それが \fBcd\fP コマンドの引き数に指定されたものとして実行されます。
このオプションが使われるのは対話的シェルだけです。
.TP 8
\fBcdable_vars\fP
設定されている場合、組み込みコマンド \fBcd\fP への引き数でディレクトリでないものは変数の名前とみなされ、 その値が変更先のディレクトリとなります。
.TP 8
\fBcdspell\fP
設定されている場合、 \fBcd\fP コマンドのディレクトリ要素におけるスペルのちょっとした誤りは修正されます。
チェックされる誤りは、文字の入れ替わり・文字の欠け・ 1 文字余分にあることです。 訂正できた場合には、訂正後のファイル名が表示され、
コマンドは続けて実行されます。 このオプションが使われるのは対話的シェルだけです。
.TP 8
\fBcheckhash\fP
設定されている場合、 \fBbash\fP はハッシュ表で見つけたコマンドを実行する前に 実際に存在するかどうかをチェックします。
ハッシュされているコマンドが既になくなっている場合、 通常のパス検索が行われます。
.TP 8
\fBcheckjobs\fP
設定されている場合、\fBbash\fP は対話的シェルが終了する前に、 停止中のジョブや実行中のジョブの状態を一覧します。
実行中のジョブがあれば、シェルの終了は、 間にほかのコマンドを挟まずに 2 回目の終了が試みられるまで延期されます (前述の
.SM
\fBジョブ制御\fP を参照)。 停止中のジョブがある場合は、シェルは常に終了を延期します。
.TP 8
\fBcheckwinsize\fP
設定されている場合、\fBbash\fP はコマンドの実行後に毎回ウィンドウの大きさをチェックし、 必要に応じて
.SM
\fBLINES\fP と
.SM
\fBCOLUMNS\fP の値を更新します。
.TP 8
\fBcmdhist\fP
設定されている場合、 \fBbash\fP は複数行に分かれているコマンドの全ての行を、 同じ履歴エントリに保存しようとします。
これを使うと、複数行に分かれているコマンドの再編集が容易になります。
.TP 8
\fBcompat31\fP
設定されている場合、 \fBbash\fP は、条件コマンド \fB[[\fP の \fB=~\fP 演算子のクォートされた引き数に関して bash version
3.1 の動作に変更します。
.TP 8
\fBcompat32\fP
設定されている場合、 \fBbash\fP は、条件コマンド \fB[[\fP の \fB<\fP 演算子と \fB>\fP
演算子によるロケール固有の文字列比較に関して、 version 3.2 の動作に変更します。 bash の bash\-4.1
より前のバージョンでは、ASCII コードの照合と \fIstrcmp\fP(3) を使います。 bash\-4.1 およびそれ以後のバージョンでは、
現在のロケールの照合順序と \fIstrcoll\fP(3) を使います。
.TP 8
\fBcompat40\fP
設定されている場合、 \fBbash\fP は、条件コマンド \fB[[\fP の \fB<\fP 演算子と \fB>\fP
演算子によるロケール固有の文字列比較 (前項を参照) とコマンドリストの解釈の効果に関して、 version 4.0 の動作に変更します。
.TP 8
\fBcompat41\fP
設定されている場合、 \fBbash\fP は posix モードのときに、 ダブルクォートの中のパラメータ展開で シングルクォートを特殊文字として扱います。
シングルクォートは対応が取れている (偶数個) 必要があり、 シングルクォートの間の文字はクォートされているものとして扱われます。 これは
version 4.1 の posix モードの動作です。 bash のデフォルトの動作は前のバージョンのままです。
.TP 8
\fBdirspell\fP
設定されている場合、 \fBbash\fP は 指定されたディレクトリ名が存在しなければ、 単語補完のときにディレクトリ名のスペルの訂正を試みます。
.TP 8
\fBdotglob\fP
設定されている場合、 \fBbash\fP は `.' で始まるファイル名をパス名展開の結果に含めます。
.TP 8
\fBexecfail\fP
設定されている場合、 組み込みコマンド \fBexec\fP への引き数として指定されたファイルが実行できなくても、 対話的でないシェルが終了しません。
対話的シェルは \fBexec\fP に失敗しても終了しません。
.TP 8
\fBexpand_aliases\fP
設定されている場合、エイリアスが前述の
.SM
\fBエイリアス\fP セクションで説明したように展開されます。
このオプションは、対話的なシェルではデフォルトで有効です。
.TP 8
\fBextdebug\fP
設定されている場合、デバッガのための動作が有効になります。
.RS
.TP
\fB1.\fP
組み込みコマンド \fBdeclare\fP の \fB\-F\fP オプションが、 引き数で指定された各関数のソースファイル名と行番号を表示します。
.TP
\fB2.\fP
\fBDEBUG\fP のトラップで実行されたコマンドが 0 以外を返したとき、 次のコマンドはスキップされ実行もされません。
.TP
\fB3.\fP
\fBDEBUG\fP のトラップで実行されたコマンドが 2 を返し、かつ、 シェルがサブルーチン (シェル関数や、組み込みコマンドの \fB.\fP や
\fBsource\fP により実行されたシェルスクリプト) を実行しているとき、\fBreturn\fP の呼び出しがシミュレートされます。
.TP
\fB4.\fP
上記のシェル変数の説明で述べたように、
.SM
\fBBASH_ARGC\fP と
.SM
\fBBASH_ARGV\fP が更新されます。
.TP
\fB5.\fP
関数のトレースが有効になります。 コマンド置換、シェル関数、\fB(\fP \fIcommand\fP \fB)\fP で起動されたサブシェルは、 \fBDEBUG\fP と
\fBRETURN\fP のトラップを継承します。
.TP
\fB6.\fP
エラーのトレースが有効になります。 コマンド置換、シェル関数、\fB(\fP \fIcommand\fP \fB)\fP から起動されたサブシェルは、 \fBERR\fP
のトラップを継承します。
.RE
.TP 8
\fBextglob\fP
設定されている場合、拡張されたパターンマッチング機能が有効になります。 これについては、前述の\fBパス名展開\fPで説明しています。
.TP 8
\fBextquote\fP
設定されている場合、ダブルクォート中の \fB${\fP\fIparameter\fP\fB}\fP の展開で、\fB$\fP\(aq\fIstring\fP\(aq と
\fB$\fP"\fIstring\fP" のクォートが機能します。 このオプションは、デフォルトで有効です。
.TP 8
\fBfailglob\fP
設定されている場合、パス名展開でパターンがファイル名のマッチに失敗すると、 展開エラーになります。
.TP 8
\fBforce_fignore\fP
設定されている場合、単語補完において、シェル変数
.SM
\fBFIGNORE\fP で指定されたサフィックスの単語は無視されます。
無視された単語が唯一の補完候補であったとしても無視されます。 詳しい説明については、前述の
.SM
\fBシェル変数\fP の
.SM
\fBFIGNORE\fP の説明を参照してください。 このオプションは、デフォルトで有効です。
.TP 8
\fBglobstar\fP
設定されている場合、\fB**\fP というパターンがパス名展開で使われると、 深さ 0 以上のディレクトリやサブディレクトリの全てのファイルにマッチします。
直後に \fB/\fP が続く場合には、 ディレクトリとサブディレクトリのみにマッチします。
.TP 8
\fBgnu_errfmt\fP
設定されている場合、シェルのエラーメッセージは GNU 標準のエラーメッセージの形式で出力されます。
.TP 8
\fBhistappend\fP
設定されている場合、シェルの終了時に変数
.SM
\fBHISTFILE\fP の値で指定しているファイルに履歴リストが追加されます。
ファイルへの上書きは行われなくなります。
.TP 8
\fBhistreedit\fP
この変数が設定されており、かつ \fBreadline\fP が使われている場合、ユーザは失敗した履歴置換を再編集できます。
.TP 8
\fBhistverify\fP
この変数が設定されており、かつ \fBreadline\fP が使われている場合、履歴置換の結果は即座にはシェルのパーザに渡されません。
その代わり、結果として得られた行は \fBreadline\fP の編集バッファに読み込まれ、さらに修正できます。
.TP 8
\fBhostcomplete\fP
この変数が設定されており、かつ \fBreadline\fP が使われている場合、\fBbash\fP は \fB@\fP
を含む単語を補完するときにホスト名補完を実行しようとします (前述の
.SM
\fBREADLINE ライブラリ\fP のセクションにおける \fB補完\fP
を参照)。 これはデフォルトで有効になっています。
.TP 8
\fBhuponexit\fP
設定されている場合、\fBbash\fP は対話的なログインシェルを終了するときに、 全てのジョブに
.SM
\fBSIGHUP\fP を送ります。
.TP 8
\fBinteractive_comments\fP
設定されている場合、 \fB#\fP で始まる単語について、その単語とその行の残りの文字を 対話的シェルに無視させることができます (前述の
.SM
\fBコメント\fP セクションを参照)。 このオプションはデフォルトで有効になっています。
.TP 8
\fBlastpipe\fP
設定されており、かつジョブ制御が有効でなければ、 シェルはバックグラウンドでの実行ではないパイプラインの最後のコマンドを 現在のシェル環境で実行します。
.TP 8
\fBlithist\fP
設定されており、かつ \fBcmdhist\fP オプションが有効ならば、 複数行に分かれているコマンドは (セミコロンで区切られるのではなく)
できる限り途中に改行を埋め込むことで履歴に保存されます。
.TP 8
\fBlogin_shell\fP
シェルがログインシェルとして起動されると (前述の
.SM
\fBINVOCATION\fP を参照)、このオプションが設定されます。
この値を変更することはできません。
.TP 8
\fBmailwarn\fP
設定されており、かつ \fBbash\fP がメールのチェックに使うファイルが 前回のチェック以降にアクセスされている場合、 メッセージ \*(lqThe mail
in \fImailfile\fP has been read\*(rq が表示されます。
.TP 8
\fBno_empty_cmd_completion\fP
設定されており、かつ \fBreadline\fP が使われている場合、 空行に対してコマンド補完をさせようとしたときに、 \fBbash\fP は補完候補を
.SM
\fBPATH\fP から検索しません。
.TP 8
\fBnocaseglob\fP
設定されている場合、 \fBbash\fP はパス名展開 (前述の \fBパス名展開\fP を参照) を行うときに、
ファイル名の大文字と小文字を区別せずにマッチングを行います。
.TP 8
\fBnocasematch\fP
設定されている場合、 \fBbash\fP は条件コマンド \fBcase\fP や \fB[[\fP 実行時のパターンマッチで
大文字小文字を区別せずにパターンマッチを行います。
.TP 8
\fBnullglob\fP
設定されている場合、 \fBbash\fP はどのファイルにもマッチしないパターン (前述の \fBパス名展開\fP を参照)
を、その文字列自身ではなく、空文字列に展開します。
.TP 8
\fBprogcomp\fP
設定されている場合、プログラム補完機能 (前述の\fBプログラム補完\fPを参照) が有効になります。 このオプションはデフォルトで有効になっています。
.TP 8
\fBpromptvars\fP
設定されている場合、 プロンプト文字列に対して パラメータ展開、コマンド置換、算術式展開、クォート削除 が行われます。 この展開は前述の
.SM
\fBプロンプト\fP セクションで説明した展開が行われた後に行われます。 このオプションはデフォルトで有効になっています。
.TP 8
\fBrestricted_shell\fP
シェルが制限モードで起動された場合、 このオプションが設定されます (後述の
.SM
\fB制限付きのシェル\fP セクションを参照)。
この値を変更することはできません。 これは起動ファイルが実行されるときにもリセットされないので、
シェルが制限付きかどうかを起動ファイル内部で知ることができます。
.TP 8
\fBshift_verbose\fP
設定されている場合、組み込みコマンド \fBshift\fP においてシフトの回数が位置パラメータの数を超えると、 エラーメッセージが出力されます。
.TP 8
\fBsourcepath\fP
設定されている場合、組み込みコマンド \fBsource\fP (\fB.\fP) は
.SM
\fBPATH\fP
の値を使って、引き数として与えられたファイルを含むディレクトリを探します。 このオプションはデフォルトで有効です。
.TP 8
\fBxpg_echo\fP
設定されている場合、 組み込みコマンド \fBecho\fP は デフォルトでバックスラッシュによるエスケープシーケンスを展開します。
.RE
.PD
.TP
\fBsuspend\fP [\fB\-f\fP]
.SM
\fBSIGCONT\fP シグナルを受け取るまで、シェルの実行をサスペンドします。 ログインシェルはサスペンドできません。 \fB\-f\fP
オプションを与えると、この動作が上書きされ、ログインシェルがサスペンド できるようになります。 シェルがログインシェルかつ \fB\-f\fP
が与えられていない場合と、ジョブ制御が有効でない場合とを除いて、 返却ステータスは 0 です。
.TP
\fBtest\fP \fIexpr\fP
.PD 0
.TP
\fB[\fP \fIexpr\fP \fB]\fP
条件式 \fIexpr\fP を評価した結果に基づいて、ステータス 0 または 1 を返します。
演算子とオペランドそれぞれは別々の引き数でなければなりません。 式は前述の
.SM
\fB条件式\fP セクションで説明したプライマリで構成されます。
\fBtest\fP はオプションを受け取らず、 引き数 \fB\-\-\fP をオプションの終わりを示すものとして受け取りも無視もしません。
.if t .sp 0.5
.if n .sp 1
式は次に示す演算子を使って結合できます。 優先度の高い順に示します。 式の評価は後で述べるように引き数の数に依存します。 引き数が 5
つ以上のときは演算子の優先度に従います。
.RS
.PD 0
.TP
\fB! \fP\fIexpr\fP
\fIexpr\fP が偽ならば真になります。
.TP
\fB( \fP\fIexpr\fP\fB )\fP
\fIexpr\fP の値を返します。 これを使うと、通常の演算子の優先度を変更できます。
.TP
\fIexpr1\fP \-\fBa\fP \fIexpr2\fP
\fIexpr1\fP と \fIexpr2\fP が両方とも真ならば真になります。
.TP
\fIexpr1\fP \-\fBo\fP \fIexpr2\fP
\fIexpr1\fP と \fIexpr2\fP のいずれかが真ならば真になります。
.PD
.PP
\fBtest\fP および \fB[\fP は、 引き数の数に基づいた規則の集合を用いて条件式を評価します。
.if t .sp 0.5
.if n .sp 1
.PD 0
.TP
引き数が 0 個
この式は偽です。
.TP
引き数が 1 個
引き数が空でない場合に限り真になります。
.TP
引き数が 2 個
最初の引き数が \fB!\fP ならば、 2 番目の引き数が空の場合に限り真になります。 最初の引き数が、既に
.SM
\fB条件式\fP
セクションで説明した単項条件演算子のいずれかであれば、 単項の評価が真の場合に式は真となります。
最初の引き数が正しい単項条件演算子でなければ、式は偽となります。
.TP
引き数が 3 個
以下の順に条件が適用されます。 2 番目の引き数が、既に
.SM
\fB条件式\fP セクションで説明した二値条件演算子のいずれかであれば、
最初の引き数と 3 番目の引き数をオペランドとして使った 二値評価の結果が式の結果となります。 引き数が 3 個の場合、 \fB\-a\fP と \fB\-o\fP
は二値演算子として扱われます。 最初の引き数が \fB!\fP であれば、2 番目と 3 番目の引き数を使った、 引き数 2
つの評価の結果を否定したものが値となります。 最初の引き数が \fB(\fP であり、3 番目の引き数が \fB)\fP ならば、 2 番目の引き数を使って引き数
1 つの評価を行った値が結果となります。 これら以外の場合には、式は偽となります。
.TP
引き数が 4 個
最初の引き数が \fB!\fP ならば、 残りの引き数で作った引き数 3 つの式の値を否定したものが結果となります。
それ以外の場合には、先に挙げた規則を使った優先度に従って 式が展開・評価されます。
.TP
引き数が 5 個以上
先に挙げた規則を使った優先度に従って式が展開・評価されます。
.if t .sp 0.5
.if n .sp 1
.LP
\fBtest\fP や \fB[\fP では、演算子 \fB<\fP と \fB>\fP は ASCII コードに基づき辞書順にソートします
.RE
.PD
.TP
\fBtimes\fP
シェルとシェルから実行したプロセスのそれぞれについて、 累積のユーザ時間とシステム時間を加えたものを出力します。 返却ステータスは 0 です。
.TP
\fBtrap\fP [\fB\-lp\fP] [[\fIarg\fP] \fIsigspec\fP ...]
シェルがシグナル \fIsigspec\fP を受け取ると、コマンド \fIarg\fP が読み込まれて、実行されます。 \fIarg\fP が存在しない (かつ
\fIsigspec\fP が一つ指定された) 場合か、 \fIarg\fP が \fB\-\fP の場合、 指定されたシグナルは全てオリジナルの動作
(シェルの起動時に設定されていた値) にリセットされます。 \fIarg\fP が空文字列である場合、それぞれの \fIsigspec\fP
で指定されたシグナルは、 シェルとシェルが起動したコマンドから無視されます。 \fIarg\fP なしで \fB\-p\fP オプションが与えられた場合、 各
\fIsigspec\fP に関連付けられた trap コマンドが表示されます。 引き数が全くないか、 \fB\-p\fP だけが与えられた場合、 \fBtrap\fP
は各シグナルに関連付けられたコマンドのリストを出力します。 \fB\-l\fP オプションを与えると、 シェルはシグナル名と対応する番号のリストを出力します。
それぞれの \fIsigspec\fP は、<\fIsignal.h\fP> で定義されているシグナル名、またはシグナル番号です。
シグナル名は大文字小文字は区別されず、先頭の
.SM
\fBSIG\fP は省略可能です。
.if t .sp 0.5
.if n .sp 1
\fIsigspec\fP が
.SM
\fBEXIT\fP (0) であれば、シェルの終了時にコマンド \fIarg\fP が実行されます。 \fIsigspec\fP
が
.SM
\fBDEBUG\fP であれば、各々の \fI単純なコマンド\fP、\fIfor\fP コマンド、\fIcase\fP コマンド、\fIselect\fP
コマンド、各々の算術 \fIfor\fP コマンドの前、およびシェル関数の最初のコマンドの実行前 (前述の
.SM
\fBシェルの文法\fPセクションを参照)
に、コマンド \fIarg\fP が実行されます。 \fBDEBUG\fP のトラップの影響についての詳細は組み込みコマンド \fBshopt\fP の
\fBextdebug\fP オプションの説明を参照してください。 \fIsigspec\fP が
.SM
\fBRETURN\fP
であれば、シェル関数の実行、または組み込みコマンドの \fB.\fP や \fBsource\fP で実行されたスクリプトの実行が終わるたびにコマンド \fIarg\fP
が実行されます。
.if t .sp 0.5
.if n .sp 1
\fIsigspec\fP が
.SM
\fBERR\fP であれば、 単純なコマンドが 0 以外の終了ステータスのときにコマンド \fIarg\fP
が実行されます。 ただし、失敗したコマンドが、 \fBwhile\fP または \fBuntil\fP キーワード直後のコマンドリストに含まれる場合、 \fIif\fP
文の条件に含まれる場合、 \fB&&\fP や \fB||\fP のリスト中で実行するコマンドに含まれる場合、 および、コマンドの戻り値が \fB!\fP
で反転されている場合には、
.SM
\fBERR\fP のトラップは実行されません。 これらは \fBerrexit\fP オプションが従う条件と同じです。
.if t .sp 0.5
.if n .sp 1
シェルに入る際に無視されるシグナルは、 トラップもリセットもできません。 無視されなかったシグナルのトラップは、
サブシェルやサブシェル環境では作られたときに 元の値にリセットされます。 \fIsigspec\fP のいずれかが不正であれば、返却ステータスは偽になります。
それ以外の場合には、 \fBtrap\fP は真を返します。
.TP
\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP ...]
オプションなしの場合には、各 \fIname\fP をコマンド名として使ったときに、それがどのように解釈されるかを示します。 \fB\-t\fP オプションを使うと、
\fIname\fP がエイリアス、シェルの予約語、関数、 組み込みコマンド、ディスク上のファイルのいずれかの場合、 \fBtype\fP はそれぞれ
\fIalias\fP, \fIkeyword\fP, \fIfunction\fP, \fIbuiltin\fP, \fIfile\fP という文字列を出力します。 \fIname\fP
が見つからない場合は何も出力されず、偽の終了ステータスが返されます。 \fB\-p\fP オプションを使うと、 \fBtype\fP は \fIname\fP
をコマンド名として指定した場合に実行されるディスクファイルの名前を返します。 ただし、
.if t \f(CWtype -t name\fP
.if n ``type -t name''
が \fIfile\fP を返さない場合は、何も返しません。 \fB\-P\fP オプションを使うと、
.if t \f(CWtype -t name\fP
.if n ``type -t name''
が \fIfile\fP を返さない場合でも \fIname\fP を
.SM
\fBPATH\fP から探します。 コマンドがハッシュされている場合、 \fB\-p\fP
や \fB\-P\fP はハッシュされている値を表示します。 この場合、表示されるのは、必ずしも
.SM
\fBPATH\fP
中で最初に現われるファイルとは限りません。 \fB\-a\fP オプションを使うと、 \fBtype\fP は \fIname\fP
という名前の実行ファイルがある場所を全て出力します。 \fB\-p\fP オプションが同時に使われていない場合に限り、 エイリアスや関数も出力されます。
\fB\-a\fP を使うときには、ハッシュされているコマンドの表は参照されません。 \fB\-f\fP オプションを使うと、 組み込みコマンド \fBcommand\fP
と同じように、シェル関数を探しません。 \fBtype\fP は、すべての引き数が見つかれば真を返し、 いずれかが見つからなければ偽を返します。
.TP
\fBulimit\fP [\fB\-HSTabcdefilmnpqrstuvx\fP [\fIlimit\fP]]
これを使うと、シェルおよびシェルが起動するプロセスが 利用できるリソースを制御できます。 ただし、このような制御ができるシステムの場合に限ります。
\fB\-H\fP オプションと \fB\-S\fP オプションは、 それぞれ指定されたリソースに対する 強い制限 (hard limit) と弱い制限 (soft
limit) を設定します。 強い制限は一度設定すると、root 以外のユーザが増やすことはできません。 弱い制限は強い制限の値までは増やせます。
\fB\-H\fP と \fB\-S\fP がどちらも指定されていない場合、 強い制限と弱い制限が両方とも設定されます。 \fIlimit\fP の値には、数字
(単位はリソースに応じて規定)、または \fBhard\fP, \fBsoft\fP, \fBunlimited\fP が指定できます。 \fBhard\fP,
\fBsoft\fP, \fBunlimited\fP は、それぞれ現在の強い制限、現在の弱い制限、制限なしを表します。 \fIlimit\fP
を省略すると、リソースの弱い制限の現在値が表示されます。 ただし、\fB\-H\fP が与えられている場合は除きます。
複数のリソースが指定されているときは、制限名と単位が値の前に出力されます。 他のオプションは以下のように解釈されます:
.RS
.PD 0
.TP
\fB\-a\fP
現在の制限を全て表示する
.TP
\fB\-b\fP
ソケットバッファの最大サイズ
.TP
\fB\-c\fP
生成されるコア (core) ファイルの最大サイズ
.TP
\fB\-d\fP
プロセスのデータセグメントの最大サイズ
.TP
\fB\-e\fP
スケジュール優先度 ("nice") の最大値
.TP
\fB\-f\fP
シェルとその子プロセスが生成できるファイルの最大サイズ
.TP
\fB\-i\fP
保留中シグナルの最大数
.TP
\fB\-l\fP
メモリにロックできる最大サイズ
.TP
\fB\-m\fP
常駐セットサイズ (resident set size) の最大値 (多くのシステムはこの制限を守りません)
.TP
\fB\-n\fP
オープンできるファイル・ディスクリプターの最大数 (ほとんどのシステムでは、この値を設定することはできません)
.TP
\fB\-p\fP
512 バイトブロック単位でのパイプのサイズ (これは設定できないかもしれません)
.TP
\fB\-q\fP
POSIX メッセージキューの最大バイト数
.TP
\fB\-r\fP
リアルタイム・スケジューリングの優先度の最大値
.TP
\fB\-s\fP
最大スタックサイズ
.TP
\fB\-t\fP
CPU 時間の最大量 (秒単位)
.TP
\fB\-u\fP
1 人のユーザが使用できる最大のプロセス数
.TP
\fB\-v\fP
そのシェルが使用できる最大の仮想メモリ量 (システムによっては、子プロセスも含まれる)
.TP
\fB\-x\fP
ファイルロックの最大数
.TP
\fB\-T\fP
スレッドの最大数
.PD
.PP
\fIlimit\fP が指定された場合、その値が指定されたリソースの新しい値となります (\fB\-a\fP は表示専用です)。
オプションが全く指定されなかった場合は、 \fB\-f\fP が指定されたものとみなされます。 値は 1024 バイト単位で増えますが、例外として \fB\-t\fP
は秒単位、 \fB\-p\fP 512 バイトブロック単位、 \fB\-T\fP, \fB\-b\fP, \fB\-n\fP, \fB\-n\fP, \fB\-u\fP は単位なしの値です。
返却ステータスは基本的に 0 ですが、 不正なオプションや引き数が渡された場合、 新しい制限を設定する際にエラーが起きた場合は除きます。
.RE
.TP
\fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP]
ユーザのファイル生成マスクに \fImode\fP を設定します。 \fImode\fP が数字で始まる場合には、これは 8 進数と解釈されます。
それ以外の場合には、 \fIchmod\fP(1) に指定するのと同様のシンボリックなモードマスクと解釈されます。 \fImode\fP
が省略されると、現在のマスクの値が出力されます。 \fB\-S\fP オプションを指定すると、マスクはシンボリックな形式で表示されます。 デフォルトの出力は 8
進の数値です。 \fB\-p\fP オプションが指定され、かつ \fImode\fP が省略された場合、入力として再利用できる形式で出力が行われます。
モードが正常に変更できた場合や、 \fImode\fP 引き数が全く与えられなかった場合には、 返却ステータスは 0 となります。
それ以外の場合には偽となります。
.TP
\fBunalias\fP [\-\fBa\fP] [\fIname\fP ...]
定義されているエイリアスのリストから \fIname\fP を削除します。 \fB\-a\fP が与えられている場合には、エイリアス定義は全て削除されます。
与えられた \fIname\fP が定義されているエイリアスでない場合以外は、返却ステータスは真になります。
.TP
\fBunset\fP [\-\fBfv\fP] [\fIname\fP ...]
\fIname\fP それぞれについて、対応する変数や関数を削除します。 オプションが全く指定されていない場合や、 \fB\-v\fP
オプションが指定された場合は、各 \fIname\fP はシェル変数を参照します。 読み込み専用の変数の設定を消すことはできません。 \fB\-f\fP
が指定されている場合、各 \fIname\fP はシェル関数を参照し、その関数の定義が削除されます。 設定が消された変数や関数は全て、
それ以降のコマンドに渡される環境変数からも削除されます。
.SM
\fBCOMP_WORDBREAKS\fP,
.SM
\fBRANDOM\fP,
.SM
\fBSECONDS\fP,
.SM
\fBLINENO\fP,
.SM
\fBHISTCMD\fP,
.SM
\fBFUNCNAME\fP,
.SM
\fBGROUPS\fP,
.SM
\fBDIRSTACK\fP のいずれかの設定を消した場合、これらが持つ特別な特性もなくなります。
これは後で再設定しても元に戻ることはありません。 \fIname\fP が読み込み専用の場合以外は、 終了ステータスは真となります。
.TP
\fBwait\fP [\fIn ...\fP]
指定された各プロセスを wait し、その終了ステータスを返します。 各 \fIn\fP はプロセス ID またはジョブ指定です。
ジョブ指定を与えた場合、そのジョブのパイプラインに含まれる 全てのプロセスを wait します。 \fIn\fP
が与えられていない場合には、現在アクティブな全ての子プロセスを wait し、 返却ステータスは 0 となります。 \fIn\fP
が存在しないプロセスやジョブを指定している場合、 返却ステータスは 127 になります。 それ以外の場合、返却ステータスは wait
していた最後のプロセスまたはジョブの終了ステータスとなります。
.if \n(zZ=1 .ig zZ
.\" bash_builtins
.SH "制限付きのシェル (RESTRICTED SHELL)"
.\" rbash.1
.zY
.PP
\fBbash\fP を \fBrbash\fP という名前で起動した場合や、起動時に \fB\-r\fP オプションを指定した場合には、シェルは制限された状態になります。
制限付きのシェルは、 標準のシェルよりも細かく制御された環境を用意したいときに使われます。 制限付きのシェルは \fBbash\fP
と全く同じように動作しますが、 以下のようなことが許可されなかったり実行されなかったりします。
.IP \(bu
\fBcd\fP を使ってディレクトリを変更すること
.IP \(bu
.SM
\fBSHELL\fP,
.SM
\fBPATH\fP,
.SM
\fBENV\fP,
.SM
\fBBASH_ENV\fP
の値の設定や設定取り消しを行うこと
.IP \(bu
\fB/\fP を含むコマンド名を指定すること
.IP \(bu
組み込みコマンド \fB.\fP の引き数として \fB/\fP を含むファイル名を指定すること
.IP \(bu
組み込みコマンド \fBhash\fP のオプション \fB\-p\fP の引き数として \fB/\fP を含むファイル名を指定すること
.IP \(bu
起動時にシェル環境から関数定義をインポートすること
.IP \(bu
起動時にシェル環境から
.SM
\fBSHELLOPTS\fP の値を解釈すること
.IP \(bu
リダイレクション演算子 >, >|, <>, >&, &>, >>
を使ってリダイレクトを行 なうこと
.IP \(bu
組み込みコマンド \fBexec\fP を用いて、シェルを別のコマンドに置き換えること
.IP \(bu
組み込みコマンド \fBenable\fP の \fB\-f\fP オプションと \fB\-d\fP オプションを使って、組み込みコマンドを追加・削除すること
.IP \(bu
組み込みコマンド \fBenable\fP を使って、無効になっている組み込みコマンドを有効にすること
.IP \(bu
組み込みコマンド \fBcommand\fP に \fB\-p\fP オプションを指定すること
.IP \(bu
\fBset +r\fP や \fBset +o restricted\fP を用いて制限モードを解除すること
.PP
これらの制限は、何らかの起動ファイルを読み込んだ後に適用されます。
.PP
.ie \n(zY=1 シェルスクリプトであると判明したファイルが実行されるとき、
.el \{ シェルスクリプトであると判明したファイルが実行されるとき
(前述の
.SM
.B "コマンドの実行"
を参照)、
\}
\fBrbash\fP はスクリプト実行用に立ち上げたシェルでは制限を全て無効にします。
.if \n(zY=1 .ig zY
.\" end of rbash.1
.SH 関連項目
.PD 0
.TP
\fIBash Reference Manual\fP, Brian Fox and Chet Ramey
.TP
\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
.TP
\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
.TP
\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE
.TP
\fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1)
.TP
\fIemacs\fP(1), \fIvi\fP(1)
.TP
\fIreadline\fP(3)
.PD
.SH ファイル
.PD 0
.TP
.FN /bin/bash
\fBbash\fP の実行ファイル。
.TP
.FN /etc/profile
システム全体用の初期化ファイル。ログインシェルが実行します。
.TP
.FN ~/.bash_profile
個人用の初期化ファイル。ログインシェルが実行します。
.TP
.FN ~/.bashrc
対話シェルごとに実行される、個人用の起動ファイル。
.TP
.FN ~/.bash_logout
個人用のログインシェル後処理ファイル。 ログインシェルの終了時に実行されます。
.TP
.FN ~/.inputrc
個人用の \fIreadline\fP 初期化ファイル。
.PD
.SH 作者
Brian Fox, Free Software Foundation
.br
bfox@gnu.org
.PP
Chet Ramey, Case Western Reserve University
.br
chet.ramey@case.edu
.SH バグ報告
\fBbash\fP のバグを見つけたら必ず報告してください。 ただし報告の前には、それが本当にバグであることと、 バグが最新版の \fBbash\fP
で起こることを確かめてください。 最新版は \fIftp://ftp.gnu.org/pub/gnu/bash/\fP から入手できます。
.PP
本当にバグがあると判断した場合には、 \fIbashbug\fP コマンドを使ってバグ報告を行います。 バグを修正してくださった場合には、
ぜひその内容も一緒にメールしてください! 提案や「哲学上の」バグ報告は、\fIbug\-bash@gnu.org\fP にメールしたり、 ニュースグループの
\fBgnu.bash.bug\fP に投稿したりしてくださってもかまいません。
.PP
バグ報告には必ず以下のことを書いてください:
.PP
.PD 0
.TP 20
\fBbash\fP のバージョン
.TP
ハードウェアとオペレーティングシステム
.TP
コンパイルに使ったコンパイラ
.TP
バグ動作の説明
.TP
バグを再現できる「レシピ」 (簡単なシェルスクリプト)
.PD
.PP
\fIbashbug\fP コマンドは、バグ報告を送るために用意されているテンプレートに、 最初の 3 項目を自動的に書き込みます。
.PP
このオンラインマニュアルに関するコメントやバグ報告は \fIchet.ramey@case.edu\fP 宛にお願いします。
.SH バグ
.PP
\fBbash\fP は大きすぎるし、遅すぎます。
.PP
\fBbash\fP と昔ながらのバージョンの \fBsh\fP にはちょっとした違いがいくつかあります。この大部分は
.SM
\fBPOSIX\fP
の仕様のせいで生じたものです。
.PP
使い方によっては、エイリアスは混乱の元になります。
.PP
シェル組み込みコマンドとシェル関数は、停止したり、実行を再開したりできません。
.PP
複合コマンドや `a ; b ; c' の形式のコマンド列は、 プロセスのサスペンドを行う際に綺麗に扱うことができません。 あるプロセスを停止すると、
シェルはコマンド列の次のコマンドを即座に実行するからです。 この問題はコマンド列を括弧の中に置いて サブシェルに実行させることで解決できます。
こうすれば、ひとまとまりのものとして停止できます。
.PP
配列変数は (まだ) エクスポートできません。
.PP
一度に 1 つのコプロセスしかアクティブにできません。
.zZ
.zY
|