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 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501
|
_B_A_S_H(1) General Commands Manual _B_A_S_H(1)
NNAAMMEE
bash - GNU Bourne-Again SHell
SSYYNNOOPPSSIISS
bbaasshh [options] [command_string | file]
CCOOPPYYRRIIGGHHTT
Bash is Copyright (C) 1989-2025 by the Free Software Foundation, Inc.
DDEESSCCRRIIPPTTIIOONN
BBaasshh is a command language interpreter that executes commands read from
the standard input, from a string, or from a file. It is a reimplemen-
tation and extension of the Bourne shell, the historical Unix command
language interpreter. BBaasshh also incorporates useful features from the
_K_o_r_n and _C shells (kksshh and ccsshh).
POSIX is the name for a family of computing standards based on Unix.
BBaasshh is intended to be a conformant implementation of the Shell and
Utilities portion of the IEEE POSIX specification (IEEE Standard
1003.1). BBaasshh POSIX mode (hereafter referred to as _p_o_s_i_x _m_o_d_e) changes
the shell's behavior where its default operation differs from the stan-
dard to strictly conform to the standard. See SSEEEE AALLSSOO below for a
reference to a document that details how posix mode affects bbaasshh's be-
havior. BBaasshh can be configured to be POSIX-conformant by default.
OOPPTTIIOONNSS
All of the single-character shell options documented in the description
of the sseett builtin command, including --oo, can be used as options when
the shell is invoked. In addition, bbaasshh interprets the following op-
tions when it is invoked:
--cc If the --cc option is present, then commands are read from the
first non-option argument _c_o_m_m_a_n_d___s_t_r_i_n_g. If there are argu-
ments after the _c_o_m_m_a_n_d___s_t_r_i_n_g, the first argument is as-
signed to $$00 and any remaining arguments are assigned to the
positional parameters. The assignment to $$00 sets the name of
the shell, which is used in warning and error messages.
--ii If the --ii option is present, the shell is _i_n_t_e_r_a_c_t_i_v_e.
--ll Make bbaasshh act as if it had been invoked as a login shell (see
IINNVVOOCCAATTIIOONN below).
--rr If the --rr option is present, the shell becomes _r_e_s_t_r_i_c_t_e_d
(see RREESSTTRRIICCTTEEDD SSHHEELLLL below).
--ss If the --ss option is present, or if no arguments remain after
option processing, the shell reads commands from the standard
input. This option allows the positional parameters to be
set when invoking an interactive shell or when reading input
through a pipe.
--DD Print a list of all double-quoted strings preceded by $$ on
the standard output. These are the strings that are subject
to language translation when the current locale is not CC or
PPOOSSIIXX. This implies the --nn option; no commands will be exe-
cuted.
[[--++]]OO [[_s_h_o_p_t___o_p_t_i_o_n]]
_s_h_o_p_t___o_p_t_i_o_n is one of the shell options accepted by the
sshhoopptt builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). If
_s_h_o_p_t___o_p_t_i_o_n is present, --OO sets the value of that option; ++OO
unsets it. If _s_h_o_p_t___o_p_t_i_o_n is not supplied, bbaasshh prints the
names and values of the shell options accepted by sshhoopptt on
the standard output. If the invocation option is ++OO, the
output is displayed in a format that may be reused as input.
---- A ---- signals the end of options and disables further option
processing. Any arguments after the ---- are treated as a
shell script filename (see below) and arguments passed to
that script. An argument of -- is equivalent to ----.
BBaasshh also interprets a number of multi-character options. These op-
tions must appear on the command line before the single-character op-
tions to be recognized.
----ddeebbuuggggeerr
Arrange for the debugger profile to be executed before the shell
starts. Turns on extended debugging mode (see the description
of the eexxttddeebbuugg option to the sshhoopptt builtin below).
----dduummpp--ppoo--ssttrriinnggss
Equivalent to --DD, but the output is in the GNU _g_e_t_t_e_x_t "po"
(portable object) file format.
----dduummpp--ssttrriinnggss
Equivalent to --DD.
----hheellpp Display a usage message on standard output and exit success-
fully.
----iinniitt--ffiillee _f_i_l_e
----rrccffiillee _f_i_l_e
Execute commands from _f_i_l_e instead of the standard personal ini-
tialization file _~_/_._b_a_s_h_r_c if the shell is interactive (see IINN--
VVOOCCAATTIIOONN below).
----llooggiinn
Equivalent to --ll.
----nnooeeddiittiinngg
Do not use the GNU rreeaaddlliinnee library to read command lines when
the shell is interactive.
----nnoopprrooffiillee
Do not read either the system-wide startup file _/_e_t_c_/_p_r_o_f_i_l_e or
any of the personal initialization files _~_/_._b_a_s_h___p_r_o_f_i_l_e,
_~_/_._b_a_s_h___l_o_g_i_n, or _~_/_._p_r_o_f_i_l_e. By default, bbaasshh reads these
files when it is invoked as a login shell (see IINNVVOOCCAATTIIOONN be-
low).
----nnoorrcc Do not read and execute the personal initialization file
_~_/_._b_a_s_h_r_c if the shell is interactive. This option is on by de-
fault if the shell is invoked as sshh.
----ppoossiixx
Enable posix mode; change the behavior of bbaasshh where the default
operation differs from the POSIX standard to match the standard.
----rreessttrriicctteedd
The shell becomes restricted (see RREESSTTRRIICCTTEEDD SSHHEELLLL below).
----vveerrbboossee
Equivalent to --vv.
----vveerrssiioonn
Show version information for this instance of bbaasshh on the stan-
dard output and exit successfully.
AARRGGUUMMEENNTTSS
If arguments remain after option processing, and neither the --cc nor the
--ss option has been supplied, the first argument is treated as the name
of a file containing shell commands (a _s_h_e_l_l _s_c_r_i_p_t). When bbaasshh is in-
voked in this fashion, $$00 is set to the name of the file, and the posi-
tional parameters are set to the remaining arguments. BBaasshh reads and
executes commands from this file, then exits. BBaasshh's exit status is
the exit status of the last command executed in the script. If no com-
mands are executed, the exit status is 0. BBaasshh first attempts to open
the file in the current directory, and, if no file is found, searches
the directories in PPAATTHH for the script.
IINNVVOOCCAATTIIOONN
A _l_o_g_i_n _s_h_e_l_l is one whose first character of argument zero is a --, or
one started with the ----llooggiinn option.
An _i_n_t_e_r_a_c_t_i_v_e _s_h_e_l_l is one started without non-option arguments (un-
less --ss is specified) and without the --cc option, and whose standard in-
put and standard error are both connected to terminals (as determined
by _i_s_a_t_t_y(3)), or one started with the --ii option. BBaasshh sets PPSS11 and $$--
includes ii if the shell is interactive, so a shell script or a startup
file can test this state.
The following paragraphs describe how bbaasshh executes its startup files.
If any of the files exist but cannot be read, bbaasshh reports an error.
Tildes are expanded in filenames as described below under TTiillddee EExxppaann--
ssiioonn in the EEXXPPAANNSSIIOONN section.
When bbaasshh is invoked as an interactive login shell, or as a non-inter-
active shell with the ----llooggiinn option, it first reads and executes com-
mands from the file _/_e_t_c_/_p_r_o_f_i_l_e, if that file exists. After reading
that file, it looks for _~_/_._b_a_s_h___p_r_o_f_i_l_e, _~_/_._b_a_s_h___l_o_g_i_n, and _~_/_._p_r_o_f_i_l_e,
in that order, and reads and executes commands from the first one that
exists and is readable. The ----nnoopprrooffiillee option may be used when the
shell is started to inhibit this behavior.
When an interactive login shell exits, or a non-interactive login shell
executes the eexxiitt builtin command, bbaasshh reads and executes commands
from the file _~_/_._b_a_s_h___l_o_g_o_u_t, if it exists.
When an interactive shell that is not a login shell is started, bbaasshh
reads and executes commands from _~_/_._b_a_s_h_r_c, if that file exists. The
----nnoorrcc option inhibits this behavior. The ----rrccffiillee _f_i_l_e option causes
bbaasshh to use _f_i_l_e instead of _~_/_._b_a_s_h_r_c.
When bbaasshh is started non-interactively, to run a shell script, for ex-
ample, it looks for the variable BBAASSHH__EENNVV in the environment, expands
its value if it appears there, and uses the expanded value as the name
of a file to read and execute. BBaasshh behaves as if the following com-
mand were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but does not use the value of the PPAATTHH variable to search for the file-
name.
If bbaasshh is invoked with the name sshh, it tries to mimic the startup be-
havior of historical versions of sshh as closely as possible, while con-
forming to the POSIX standard as well. When invoked as an interactive
login shell, or a non-interactive shell with the ----llooggiinn option, it
first attempts to read and execute commands from _/_e_t_c_/_p_r_o_f_i_l_e and
_~_/_._p_r_o_f_i_l_e, in that order. The ----nnoopprrooffiillee option inhibits this behav-
ior. When invoked as an interactive shell with the name sshh, bbaasshh looks
for the variable EENNVV, expands its value if it is defined, and uses the
expanded value as the name of a file to read and execute. Since a
shell invoked as sshh does not attempt to read and execute commands from
any other startup files, the ----rrccffiillee option has no effect. A non-in-
teractive shell invoked with the name sshh does not attempt to read any
other startup files.
When invoked as sshh, bbaasshh enters posix mode after reading the startup
files.
When bbaasshh is started in posix mode, as with the ----ppoossiixx command line
option, it follows the POSIX standard for startup files. In this mode,
interactive shells expand the EENNVV variable and read and execute com-
mands from the file whose name is the expanded value. No other startup
files are read.
BBaasshh attempts to determine when it is being run with its standard input
connected to a network connection, as when executed by the historical
and rarely-seen remote shell daemon, usually _r_s_h_d, or the secure shell
daemon _s_s_h_d. If bbaasshh determines it is being run non-interactively in
this fashion, it reads and executes commands from _~_/_._b_a_s_h_r_c, if that
file exists and is readable. BBaasshh does not read this file if invoked
as sshh. The ----nnoorrcc option inhibits this behavior, and the ----rrccffiillee op-
tion makes bbaasshh use a different file instead of _~_/_._b_a_s_h_r_c, but neither
_r_s_h_d nor _s_s_h_d generally invoke the shell with those options or allow
them to be specified.
If the shell is started with the effective user (group) id not equal to
the real user (group) id, and the --pp option is not supplied, no startup
files are read, shell functions are not inherited from the environment,
the SSHHEELLLLOOPPTTSS, BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they ap-
pear in the environment, are ignored, and the effective user id is set
to the real user id. If the --pp option is supplied at invocation, the
startup behavior is the same, but the effective user id is not reset.
DDEEFFIINNIITTIIOONNSS
The following definitions are used throughout the rest of this docu-
ment.
bbllaannkk A space or tab.
wwhhiitteessppaaccee
A character belonging to the ssppaaccee character class in the cur-
rent locale, or for which _i_s_s_p_a_c_e(3) returns true.
wwoorrdd A sequence of characters considered as a single unit by the
shell. Also known as a ttookkeenn.
nnaammee A _w_o_r_d consisting only of alphanumeric characters and under-
scores, and beginning with an alphabetic character or an under-
score. Also referred to as an iiddeennttiiffiieerr.
mmeettaacchhaarraacctteerr
A character that, when unquoted, separates words. One of the
following:
|| && ;; (( )) << >> ssppaaccee ttaabb nneewwlliinnee
ccoonnttrrooll ooppeerraattoorr
A _t_o_k_e_n that performs a control function. It is one of the fol-
lowing symbols:
|||| && &&&& ;; ;;;; ;;&& ;;;;&& (( )) || ||&& <<nneewwlliinnee>>
RREESSEERRVVEEDD WWOORRDDSS
_R_e_s_e_r_v_e_d _w_o_r_d_s are words that have a special meaning to the shell. The
following words are recognized as reserved when unquoted and either the
first word of a command (see SSHHEELLLL GGRRAAMMMMAARR below), the third word of a
ccaassee or sseelleecctt command (only iinn is valid), or the third word of a ffoorr
command (only iinn and ddoo are valid):
!! ccaassee ccoopprroocc ddoo ddoonnee eelliiff eellssee eessaacc ffii ffoorr ffuunnccttiioonn iiff iinn sseelleecctt
tthheenn uunnttiill wwhhiillee {{ }} ttiimmee [[[[ ]]]]
SSHHEELLLL GGRRAAMMMMAARR
This section describes the syntax of the various forms of shell com-
mands.
SSiimmppllee CCoommmmaannddss
A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol-
lowed by bbllaannkk-separated words and redirections, and terminated by a
_c_o_n_t_r_o_l _o_p_e_r_a_t_o_r. The first word specifies the command to be executed,
and is passed as argument zero. The remaining words are passed as ar-
guments to the invoked command.
The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if
the command is terminated by signal _n.
PPiippeelliinneess
A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of
the control operators || or ||&&. The format for a pipeline is:
[ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d_1 [ [|||||&&] _c_o_m_m_a_n_d_2 ... ]
The standard output of _c_o_m_m_a_n_d_1 is connected via a pipe to the standard
input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec-
tions specified by the _c_o_m_m_a_n_d_1(see RREEDDIIRREECCTTIIOONN below). If ||&& is the
pipeline operator, _c_o_m_m_a_n_d_1's standard error, in addition to its stan-
dard output, is connected to _c_o_m_m_a_n_d_2's standard input through the
pipe; it is shorthand for 22>>&&11 ||. This implicit redirection of the
standard error to the standard output is performed after any redirec-
tions specified by _c_o_m_m_a_n_d_1.
The return status of a pipeline is the exit status of the last command,
unless the ppiippeeffaaiill option is enabled. If ppiippeeffaaiill is enabled, the
pipeline's return status is the value of the last (rightmost) command
to exit with a non-zero status, or zero if all commands exit success-
fully. If the reserved word !! precedes a pipeline, the exit status of
that pipeline is the logical negation of the exit status as described
above. If a pipeline is executed synchronously, the shell waits for
all commands in the pipeline to terminate before returning a value.
If the ttiimmee reserved word precedes a pipeline, the shell reports the
elapsed as well as user and system time consumed by its execution when
the pipeline terminates. The --pp option changes the output format to
that specified by POSIX. When the shell is in posix mode, it does not
recognize ttiimmee as a reserved word if the next token begins with a "-".
The value of the TTIIMMEEFFOORRMMAATT variable is a format string that specifies
how the timing information should be displayed; see the description of
TTIIMMEEFFOORRMMAATT below under SShheellll VVaarriiaabblleess.
When the shell is in posix mode, ttiimmee may appear by itself as the only
word in a simple command. In this case, the shell displays the total
user and system time consumed by the shell and its children. The TTIIMMEE--
FFOORRMMAATT variable specifies the format of the time information.
Each command in a multi-command pipeline, where pipes are created, is
executed in a _s_u_b_s_h_e_l_l, which is a separate process. See CCOOMMMMAANNDD EEXXEE--
CCUUTTIIOONN EENNVVIIRROONNMMEENNTT for a description of subshells and a subshell envi-
ronment. If the llaassttppiippee option is enabled using the sshhoopptt builtin
(see the description of sshhoopptt below), and job control is not active,
the last element of a pipeline may be run by the shell process.
LLiissttss
A _l_i_s_t is a sequence of one or more pipelines separated by one of the
operators ;;, &&, &&&&, or ||||, and optionally terminated by one of ;;, &&, or
<<nneewwlliinnee>>.
Of these list operators, &&&& and |||| have equal precedence, followed by ;;
and &&, which have equal precedence.
A sequence of one or more newlines may appear in a _l_i_s_t instead of a
semicolon to delimit commands.
If a command is terminated by the control operator &&, the shell exe-
cutes the command in the _b_a_c_k_g_r_o_u_n_d in a subshell. The shell does not
wait for the command to finish, and the return status is 0. These are
referred to as _a_s_y_n_c_h_r_o_n_o_u_s commands. Commands separated by a ;; are
executed sequentially; the shell waits for each command to terminate in
turn. The return status is the exit status of the last command exe-
cuted.
AND and OR lists are sequences of one or more pipelines separated by
the &&&& and |||| control operators, respectively. AND and OR lists are
executed with left associativity. An AND list has the form
_c_o_m_m_a_n_d_1 &&&& _c_o_m_m_a_n_d_2
_c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns an exit status
of zero (success).
An OR list has the form
_c_o_m_m_a_n_d_1 |||| _c_o_m_m_a_n_d_2
_c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns a non-zero exit
status. The return status of AND and OR lists is the exit status of
the last command executed in the list.
CCoommppoouunndd CCoommmmaannddss
A _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d is one of the following. In most cases a _l_i_s_t in a
command's description may be separated from the rest of the command by
one or more newlines, and may be followed by a newline in place of a
semicolon.
(_l_i_s_t) _l_i_s_t is executed in a subshell (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONN--
MMEENNTT below for a description of a subshell environment). Vari-
able assignments and builtin commands that affect the shell's
environment do not remain in effect after the command completes.
The return status is the exit status of _l_i_s_t.
{ _l_i_s_t; }
_l_i_s_t is executed in the current shell environment. _l_i_s_t must be
terminated with a newline or semicolon. This is known as a
_g_r_o_u_p _c_o_m_m_a_n_d. The return status is the exit status of _l_i_s_t.
Note that unlike the metacharacters (( and )), {{ and }} are _r_e_-
_s_e_r_v_e_d _w_o_r_d_s and must occur where a reserved word is permitted
to be recognized. Since they do not cause a word break, they
must be separated from _l_i_s_t by whitespace or another shell
metacharacter.
((_e_x_p_r_e_s_s_i_o_n))
The arithmetic _e_x_p_r_e_s_s_i_o_n is evaluated according to the rules
described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If the value of
the expression is non-zero, the return status is 0; otherwise
the return status is 1. The _e_x_p_r_e_s_s_i_o_n undergoes the same ex-
pansions as if it were within double quotes, but unescaped dou-
ble quote characters in _e_x_p_r_e_s_s_i_o_n are not treated specially and
are removed. Since this can potentially result in empty
strings, this command treats those as expressions that evaluate
to 0.
[[[[ _e_x_p_r_e_s_s_i_o_n ]]]]
Evaluate the conditional expression _e_x_p_r_e_s_s_i_o_n and return a sta-
tus of zero (true) or non-zero (false). Expressions are com-
posed of the primaries described below under CCOONNDDIITTIIOONNAALL EEXXPPRREESS--
SSIIOONNSS. The words between the [[[[ and ]]]] do not undergo word
splitting and pathname expansion. The shell performs tilde ex-
pansion, parameter and variable expansion, arithmetic expansion,
command substitution, process substitution, and quote removal on
those words. Conditional operators such as --ff must be unquoted
to be recognized as primaries.
When used with [[[[, the << and >> operators sort lexicographically
using the current locale.
When the ==== and !!== operators are used, the string to the right
of the operator is considered a pattern and matched according to
the rules described below under PPaatttteerrnn MMaattcchhiinngg, as if the eexxtt--
gglloobb shell option were enabled. The == operator is equivalent to
====. If the nnooccaasseemmaattcchh shell option is enabled, the match is
performed without regard to the case of alphabetic characters.
The return value is 0 if the string matches (====) or does not
match (!!==) the pattern, and 1 otherwise. If any part of the
pattern is quoted, the quoted portion is matched as a string:
every character in the quoted portion matches itself, instead of
having any special pattern matching meaning.
An additional binary operator, ==~~, is available, with the same
precedence as ==== and !!==. When it is used, the string to the
right of the operator is considered a POSIX extended regular ex-
pression and matched accordingly (using the POSIX _r_e_g_c_o_m_p and
_r_e_g_e_x_e_c interfaces usually described in _r_e_g_e_x(3)). The return
value is 0 if the string matches the pattern, and 1 otherwise.
If the regular expression is syntactically incorrect, the condi-
tional expression's return value is 2. If the nnooccaasseemmaattcchh shell
option is enabled, the match is performed without regard to the
case of alphabetic characters.
If any part of the pattern is quoted, the quoted portion is
matched literally, as above. If the pattern is stored in a
shell variable, quoting the variable expansion forces the entire
pattern to be matched literally. Treat bracket expressions in
regular expressions carefully, since normal quoting and pattern
characters lose their meanings between brackets.
The match succeeds if the pattern matches any part of the
string. Anchor the pattern using the ^^ and $$ regular expression
operators to force it to match the entire string.
The array variable BBAASSHH__RREEMMAATTCCHH records which parts of the
string matched the pattern. The element of BBAASSHH__RREEMMAATTCCHH with
index 0 contains the portion of the string matching the entire
regular expression. Substrings matched by parenthesized subex-
pressions within the regular expression are saved in the remain-
ing BBAASSHH__RREEMMAATTCCHH indices. The element of BBAASSHH__RREEMMAATTCCHH with in-
dex _n is the portion of the string matching the _nth parenthe-
sized subexpression. BBaasshh sets BBAASSHH__RREEMMAATTCCHH in the global
scope; declaring it as a local variable will lead to unexpected
results.
Expressions may be combined using the following operators,
listed in decreasing order of precedence:
(( _e_x_p_r_e_s_s_i_o_n ))
Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to
override the normal precedence of operators.
!! _e_x_p_r_e_s_s_i_o_n
True if _e_x_p_r_e_s_s_i_o_n is false.
_e_x_p_r_e_s_s_i_o_n_1 &&&& _e_x_p_r_e_s_s_i_o_n_2
True if both _e_x_p_r_e_s_s_i_o_n_1 and _e_x_p_r_e_s_s_i_o_n_2 are true.
_e_x_p_r_e_s_s_i_o_n_1 |||| _e_x_p_r_e_s_s_i_o_n_2
True if either _e_x_p_r_e_s_s_i_o_n_1 or _e_x_p_r_e_s_s_i_o_n_2 is true.
The &&&& and |||| operators do not evaluate _e_x_p_r_e_s_s_i_o_n_2 if the value
of _e_x_p_r_e_s_s_i_o_n_1 is sufficient to determine the return value of
the entire conditional expression.
ffoorr _n_a_m_e [ [ iinn _w_o_r_d _._._. ] ; ] ddoo _l_i_s_t ; ddoonnee
First, expand The list of words following iinn, generating a list
of items. Then, the variable _n_a_m_e is set to each element of
this list in turn, and _l_i_s_t is executed each time. If the iinn
_w_o_r_d is omitted, the ffoorr command executes _l_i_s_t once for each po-
sitional parameter that is set (see PPAARRAAMMEETTEERRSS below). The re-
turn status is the exit status of the last command that exe-
cutes. If the expansion of the items following iinn results in an
empty list, no commands are executed, and the return status is
0.
ffoorr (( _e_x_p_r_1 ; _e_x_p_r_2 ; _e_x_p_r_3 )) [;] ddoo _l_i_s_t ; ddoonnee
First, evaluate the arithmetic expression _e_x_p_r_1 according to the
rules described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. Then, re-
peatedly evaluate the arithmetic expression _e_x_p_r_2 until it eval-
uates to zero. Each time _e_x_p_r_2 evaluates to a non-zero value,
execute _l_i_s_t and evaluate the arithmetic expression _e_x_p_r_3. If
any expression is omitted, it behaves as if it evaluates to 1.
The return value is the exit status of the last command in _l_i_s_t
that is executed, or non-zero if any of the expressions is in-
valid.
Use the bbrreeaakk and ccoonnttiinnuuee builtins (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
below) to control loop execution.
sseelleecctt _n_a_m_e [ iinn _w_o_r_d ] ; ddoo _l_i_s_t ; ddoonnee
First, expand the list of words following iinn, generating a list
of items, and print the set of expanded words the standard er-
ror, each preceded by a number. If the iinn _w_o_r_d is omitted,
print the positional parameters (see PPAARRAAMMEETTEERRSS below). sseelleecctt
then displays the PPSS33 prompt and reads a line from the standard
input. If the line consists of a number corresponding to one of
the displayed words, then sseelleecctt sets the value of _n_a_m_e to that
word. If the line is empty, sseelleecctt displays the words and
prompt again. If EOF is read, sseelleecctt completes and returns 1.
Any other value sets _n_a_m_e to null. The line read is saved in
the variable RREEPPLLYY. The _l_i_s_t is executed after each selection
until a bbrreeaakk command is executed. The exit status of sseelleecctt is
the exit status of the last command executed in _l_i_s_t, or zero if
no commands were executed.
ccaassee _w_o_r_d iinn [ [(] _p_a_t_t_e_r_n [ || _p_a_t_t_e_r_n ] ... ) _l_i_s_t ;; ] ... eessaacc
A ccaassee command first expands _w_o_r_d, and tries to match it against
each _p_a_t_t_e_r_n in turn, proceeding from first to last, using the
matching rules described under PPaatttteerrnn MMaattcchhiinngg below. A pat-
tern list is a set of one or more patterns separated by , and
the ) operator terminates the pattern list. The _w_o_r_d is ex-
panded using tilde expansion, parameter and variable expansion,
arithmetic expansion, command substitution, process substitution
and quote removal. Each _p_a_t_t_e_r_n examined is expanded using
tilde expansion, parameter and variable expansion, arithmetic
expansion, command substitution, process substitution, and quote
removal. If the nnooccaasseemmaattcchh shell option is enabled, the match
is performed without regard to the case of alphabetic charac-
ters. A _c_l_a_u_s_e is a pattern list and an associated _l_i_s_t.
When a match is found, ccaassee executes the corresponding _l_i_s_t. If
the ;;;; operator terminates the case clause, the ccaassee command
completes after the first match. Using ;;&& in place of ;;;; causes
execution to continue with the _l_i_s_t associated with the next
pattern list. Using ;;;;&& in place of ;;;; causes the shell to test
the next pattern list in the statement, if any, and execute any
associated _l_i_s_t if the match succeeds, continuing the case
statement execution as if the pattern list had not matched. The
exit status is zero if no pattern matches.
Otherwise, it is the exit status of the last command executed in
the last _l_i_s_t executed.
iiff _l_i_s_t; tthheenn _l_i_s_t; [ eelliiff _l_i_s_t; tthheenn _l_i_s_t; ] ... [ eellssee _l_i_s_t; ] ffii
The iiff _l_i_s_t is executed. If its exit status is zero, the tthheenn
_l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in
turn, and if its exit status is zero, the corresponding tthheenn
_l_i_s_t is executed and the command completes. Otherwise, the eellssee
_l_i_s_t is executed, if present. The exit status is the exit sta-
tus of the last command executed, or zero if no condition tested
true.
wwhhiillee _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee
uunnttiill _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee
The wwhhiillee command continuously executes the list _l_i_s_t_-_2 as long
as the last command in the list _l_i_s_t_-_1 returns an exit status of
zero. The uunnttiill command is identical to the wwhhiillee command, ex-
cept that the test is negated: _l_i_s_t_-_2 is executed as long as the
last command in _l_i_s_t_-_1 returns a non-zero exit status. The exit
status of the wwhhiillee and uunnttiill commands is the exit status of the
last command executed in _l_i_s_t_-_2, or zero if none was executed.
CCoopprroocceesssseess
A _c_o_p_r_o_c_e_s_s is a shell command preceded by the ccoopprroocc reserved word. A
coprocess is executed asynchronously in a subshell, as if the command
had been terminated with the && control operator, with a two-way pipe
established between the executing shell and the coprocess.
The syntax for a coprocess is:
ccoopprroocc [_N_A_M_E] _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s]
This creates a coprocess named _N_A_M_E. _c_o_m_m_a_n_d may be either a simple
command or a compound command (see above). _N_A_M_E is a shell variable
name. If _N_A_M_E is not supplied, the default name is CCOOPPRROOCC.
The recommended form to use for a coprocess is
ccoopprroocc _N_A_M_E { _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s]; }
This form is preferred because simple commands result in the coprocess
always being named CCOOPPRROOCC, and it is simpler to use and more complete
than the other compound commands.
If _c_o_m_m_a_n_d is a compound command, _N_A_M_E is optional. The word following
ccoopprroocc determines whether that word is interpreted as a variable name:
it is interpreted as _N_A_M_E if it is not a reserved word that introduces
a compound command. If _c_o_m_m_a_n_d is a simple command, _N_A_M_E is not al-
lowed; this is to avoid confusion between _N_A_M_E and the first word of
the simple command.
When the coprocess is executed, the shell creates an array variable
(see AArrrraayyss below) named _N_A_M_E in the context of the executing shell.
The standard output of _c_o_m_m_a_n_d is connected via a pipe to a file de-
scriptor in the executing shell, and that file descriptor is assigned
to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is connected via a pipe to a
file descriptor in the executing shell, and that file descriptor is as-
signed to _N_A_M_E[1]. This pipe is established before any redirections
specified by the command (see RREEDDIIRREECCTTIIOONN below). The file descriptors
can be utilized as arguments to shell commands and redirections using
standard word expansions. Other than those created to execute command
and process substitutions, the file descriptors are not available in
subshells.
The process ID of the shell spawned to execute the coprocess is avail-
able as the value of the variable _N_A_M_E_PID. The wwaaiitt builtin may be
used to wait for the coprocess to terminate.
Since the coprocess is created as an asynchronous command, the ccoopprroocc
command always returns success. The return status of a coprocess is
the exit status of _c_o_m_m_a_n_d.
SShheellll FFuunnccttiioonn DDeeffiinniittiioonnss
A shell function is an object that is called like a simple command and
executes a compound command with a new set of positional parameters.
Shell functions are declared as follows:
_f_n_a_m_e () _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n]
ffuunnccttiioonn _f_n_a_m_e [()] _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n]
This defines a function named _f_n_a_m_e. The reserved word ffuunnccttiioonn
is optional. If the ffuunnccttiioonn reserved word is supplied, the
parentheses are optional. The _b_o_d_y of the function is the com-
pound command _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d (see CCoommppoouunndd CCoommmmaannddss above).
That command is usually a _l_i_s_t of commands between { and }, but
may be any command listed under CCoommppoouunndd CCoommmmaannddss above. If the
ffuunnccttiioonn reserved word is used, but the parentheses are not sup-
plied, the braces are recommended. _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d is executed
whenever _f_n_a_m_e is specified as the name of a simple command.
When in posix mode, _f_n_a_m_e must be a valid shell _n_a_m_e and may not
be the name of one of the POSIX _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. In default
mode, a function name can be any unquoted shell word that does
not contain $$.
Any redirections (see RREEDDIIRREECCTTIIOONN below) specified when a function is
defined are performed when the function is executed.
The exit status of a function definition is zero unless a syntax error
occurs or a readonly function with the same name already exists. When
executed, the exit status of a function is the exit status of the last
command executed in the body. (See FFUUNNCCTTIIOONNSS below.)
CCOOMMMMEENNTTSS
In a non-interactive shell, or an interactive shell in which the iinntteerr--
aaccttiivvee__ccoommmmeennttss option to the sshhoopptt builtin is enabled (see SSHHEELLLL
BBUUIILLTTIINN CCOOMMMMAANNDDSS below), a word beginning with ## introduces a comment.
A word begins at the beginning of a line, after unquoted whitespace, or
after an operator. The comment causes that word and all remaining
characters on that line to be ignored. An interactive shell without
the iinntteerraaccttiivvee__ccoommmmeennttss option enabled does not allow comments. The
iinntteerraaccttiivvee__ccoommmmeennttss option is enabled by default in interactive
shells.
QQUUOOTTIINNGG
_Q_u_o_t_i_n_g is used to remove the special meaning of certain characters or
words to the shell. Quoting can be used to disable special treatment
for special characters, to prevent reserved words from being recognized
as such, and to prevent parameter expansion.
Each of the _m_e_t_a_c_h_a_r_a_c_t_e_r_s listed above under DDEEFFIINNIITTIIOONNSS has special
meaning to the shell and must be quoted if it is to represent itself.
When the command history expansion facilities are being used (see HHIISS--
TTOORRYY EEXXPPAANNSSIIOONN below), the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, usually !!, must
be quoted to prevent history expansion.
There are four quoting mechanisms: the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r, single quotes,
double quotes, and dollar-single quotes.
A non-quoted backslash (\\) is the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r. It preserves the
literal value of the next character that follows, removing any special
meaning it has, with the exception of <newline>. If a \\<newline> pair
appears, and the backslash is not itself quoted, the \\<newline> is
treated as a line continuation (that is, it is removed from the input
stream and effectively ignored).
Enclosing characters in single quotes preserves the literal value of
each character within the quotes. A single quote may not occur between
single quotes, even when preceded by a backslash.
Enclosing characters in double quotes preserves the literal value of
all characters within the quotes, with the exception of $$, ``, \\, and,
when history expansion is enabled, !!. When the shell is in posix mode,
the !! has no special meaning within double quotes, even when history
expansion is enabled. The characters $$ and `` retain their special
meaning within double quotes. The backslash retains its special mean-
ing only when followed by one of the following characters: $$, ``, "", \\,
or <<nneewwlliinnee>>. Backslashes preceding characters without a special mean-
ing are left unmodified.
A double quote may be quoted within double quotes by preceding it with
a backslash. If enabled, history expansion will be performed unless an
!! appearing in double quotes is escaped using a backslash. The back-
slash preceding the !! is not removed.
The special parameters ** and @@ have special meaning when in double
quotes (see PPAARRAAMMEETTEERRSS below).
Character sequences of the form $$'_s_t_r_i_n_g' are treated as a special
variant of single quotes. The sequence expands to _s_t_r_i_n_g, with back-
slash-escaped characters in _s_t_r_i_n_g replaced as specified by the ANSI C
standard. Backslash escape sequences, if present, are decoded as fol-
lows:
\\aa alert (bell)
\\bb backspace
\\ee
\\EE an escape character
\\ff form feed
\\nn new line
\\rr carriage return
\\tt horizontal tab
\\vv vertical tab
\\\\ backslash
\\'' single quote
\\"" double quote
\\?? question mark
\\_n_n_n The eight-bit character whose value is the octal value
_n_n_n (one to three octal digits).
\\xx_H_H The eight-bit character whose value is the hexadecimal
value _H_H (one or two hex digits).
\\uu_H_H_H_H The Unicode (ISO/IEC 10646) character whose value is the
hexadecimal value _H_H_H_H (one to four hex digits).
\\UU_H_H_H_H_H_H_H_H
The Unicode (ISO/IEC 10646) character whose value is the
hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits).
\\cc_x A control-_x character.
The expanded result is single-quoted, as if the dollar sign had not
been present.
TTrraannssllaattiinngg SSttrriinnggss
A double-quoted string preceded by a dollar sign ($$"_s_t_r_i_n_g") causes the
string to be translated according to the current locale. The _g_e_t_t_e_x_t
infrastructure performs the lookup and translation, using the LLCC__MMEESS--
SSAAGGEESS, TTEEXXTTDDOOMMAAIINNDDIIRR, and TTEEXXTTDDOOMMAAIINN shell variables. If the current
locale is CC or PPOOSSIIXX, if there are no translations available, or if the
string is not translated, the dollar sign is ignored, and the string is
treated as double-quoted as described above. This is a form of double
quoting, so the string remains double-quoted by default, whether or not
it is translated and replaced. If the nnooeexxppaanndd__ttrraannssllaattiioonn option is
enabled using the sshhoopptt builtin, translated strings are single-quoted
instead of double-quoted. See the description of sshhoopptt below under
SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS.
PPAARRAAMMEETTEERRSS
A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num-
ber, or one of the special characters listed below under SSppeecciiaall PPaarraa--
mmeetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a
_v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the
ddeeccllaarree builtin command (see ddeeccllaarree below in SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS).
The eexxppoorrtt and rreeaaddoonnllyy builtins assign specific attributes.
A parameter is set if it has been assigned a value. The null string is
a valid value. Once a variable is set, it may be unset only by using
the uunnsseett builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
A _v_a_r_i_a_b_l_e is assigned to using a statement of the form
_n_a_m_e=[_v_a_l_u_e]
If _v_a_l_u_e is not given, the variable is assigned the null string. All
_v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com-
mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN--
SSIIOONN below). If the variable has its iinntteeggeerr attribute set, then _v_a_l_u_e
is evaluated as an arithmetic expression even if the $$((((...)))) expansion
is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting and path-
name expansion are not performed. Assignment statements may also ap-
pear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett, eexxppoorrtt, rreeaaddoonnllyy, and
llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands). When in posix mode,
these builtins may appear in a command after one or more instances of
the ccoommmmaanndd builtin and retain these assignment statement properties.
In the context where an assignment statement is assigning a value to a
shell variable or array index, the "+=" operator appends to or adds to
the variable's previous value. This includes arguments to _d_e_c_l_a_r_a_t_i_o_n
commands such as ddeeccllaarree that accept assignment statements. When "+="
is applied to a variable for which the iinntteeggeerr attribute has been set,
the variable's current value and _v_a_l_u_e are each evaluated as arithmetic
expressions, and the sum of the results is assigned as the variable's
value. The current value is usually an integer constant, but may be an
expression. When "+=" is applied to an array variable using compound
assignment (see AArrrraayyss below), the variable's value is not unset (as it
is when using "="), and new values are appended to the array beginning
at one greater than the array's maximum index (for indexed arrays) or
added as additional key-value pairs in an associative array. When ap-
plied to a string-valued variable, _v_a_l_u_e is expanded and appended to
the variable's value.
A variable can be assigned the _n_a_m_e_r_e_f attribute using the --nn option to
the ddeeccllaarree or llooccaall builtin commands (see the descriptions of ddeeccllaarree
and llooccaall below) to create a _n_a_m_e_r_e_f, or a reference to another vari-
able. This allows variables to be manipulated indirectly. Whenever
the nameref variable is referenced, assigned to, unset, or has its at-
tributes modified (other than using or changing the _n_a_m_e_r_e_f attribute
itself), the operation is actually performed on the variable specified
by the nameref variable's value. A nameref is commonly used within
shell functions to refer to a variable whose name is passed as an argu-
ment to the function. For instance, if a variable name is passed to a
shell function as its first argument, running
declare -n ref=$1
inside the function creates a local nameref variable rreeff whose value is
the variable name passed as the first argument. References and assign-
ments to rreeff, and changes to its attributes, are treated as references,
assignments, and attribute modifications to the variable whose name was
passed as $$11. If the control variable in a ffoorr loop has the nameref
attribute, the list of words can be a list of shell variables, and a
name reference is established for each word in the list, in turn, when
the loop is executed. Array variables cannot be given the nnaammeerreeff at-
tribute. However, nameref variables can reference array variables and
subscripted array variables. Namerefs can be unset using the --nn option
to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the name of
a nameref variable as an argument, the variable referenced by the
nameref variable is unset.
When the shell starts, it reads its environment and creates a shell
variable from each environment variable that has a valid name, as de-
scribed below (see EENNVVIIRROONNMMEENNTT).
PPoossiittiioonnaall PPaarraammeetteerrss
A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits,
other than the single digit 0. Positional parameters are assigned from
the shell's arguments when it is invoked, and may be reassigned using
the sseett builtin command. Positional parameters may not be assigned to
with assignment statements. The positional parameters are temporarily
replaced when a shell function is executed (see FFUUNNCCTTIIOONNSS below).
When a positional parameter consisting of more than a single digit is
expanded, it must be enclosed in braces (see EEXXPPAANNSSIIOONN below). Without
braces, a digit following $ can only refer to one of the first nine po-
sitional parameters ($$11--$$99) or the special parameter $$00 (see the next
section).
SSppeecciiaall PPaarraammeetteerrss
The shell treats several parameters specially. These parameters may
only be referenced; assignment to them is not allowed. Special parame-
ters are denoted by one of the following characters.
** ($$**) Expands to the positional parameters, starting from one.
When the expansion is not within double quotes, each positional
parameter expands to a separate word. In contexts where word
expansions are performed, those words are subject to further
word splitting and pathname expansion. When the expansion oc-
curs within double quotes, it expands to a single word with the
value of each parameter separated by the first character of the
IIFFSS variable. That is, ""$$**"" is equivalent to ""$$11_c$$22_c......"", where
_c is the first character of the value of the IIFFSS variable. If
IIFFSS is unset, the parameters are separated by spaces. If IIFFSS is
null, the parameters are joined without intervening separators.
@@ ($$@@) Expands to the positional parameters, starting from one.
In contexts where word splitting is performed, this expands each
positional parameter to a separate word; if not within double
quotes, these words are subject to word splitting. In contexts
where word splitting is not performed, such as the value portion
of an assignment statement, this expands to a single word with
each positional parameter separated by a space. When the expan-
sion occurs within double quotes, and word splitting is per-
formed, each parameter expands to a separate word. That is,
""$$@@"" is equivalent to ""$$11"" ""$$22"" ...... If the double-quoted expan-
sion occurs within a word, the expansion of the first parameter
is joined with the expansion of the beginning part of the origi-
nal word, and the expansion of the last parameter is joined with
the expansion of the last part of the original word. When there
are no positional parameters, ""$$@@"" and $$@@ expand to nothing
(i.e., they are removed).
## ($$##) Expands to the number of positional parameters in decimal.
?? ($$??) Expands to the exit status of the most recently executed
command.
-- ($$--) Expands to the current option flags as specified upon invo-
cation, by the sseett builtin command, or those set by the shell
itself (such as the --ii option).
$$ ($$$$) Expands to the process ID of the shell. In a subshell, it
expands to the process ID of the parent shell, not the subshell.
!! ($$!!)Expands to the process ID of the job most recently placed
into the background, whether executed as an asynchronous command
or using the bbgg builtin (see JJOOBB CCOONNTTRROOLL below).
00 ($$00) Expands to the name of the shell or shell script. This is
set at shell initialization. If bbaasshh is invoked with a file of
commands, $$00 is set to the name of that file. If bbaasshh is
started with the --cc option, then $$00 is set to the first argument
after the string to be executed, if one is present. Otherwise,
it is set to the filename used to invoke bbaasshh, as given by argu-
ment zero.
SShheellll VVaarriiaabblleess
The shell sets following variables:
__ ($$__, an underscore) This has a number of meanings depending on
context. At shell startup, __ is set to the pathname used to in-
voke the shell or shell script being executed as passed in the
environment or argument list. Subsequently, it expands to the
last argument to the previous simple command executed in the
foreground, after expansion. It is also set to the full path-
name used to invoke each command executed and placed in the en-
vironment exported to that command. When checking mail, $$__ ex-
pands to the name of the mail file currently being checked.
BBAASSHH Expands to the full filename used to invoke this instance of
bbaasshh.
BBAASSHHOOPPTTSS
A colon-separated list of enabled shell options. Each word in
the list is a valid argument for the --ss option to the sshhoopptt
builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options
appearing in BBAASSHHOOPPTTSS are those reported as _o_n by sshhoopptt. If
this variable is in the environment when bbaasshh starts up, the
shell enables each option in the list before reading any startup
files. If this variable is exported, child shells will enable
each option in the list. This variable is read-only.
BBAASSHHPPIIDD
Expands to the process ID of the current bbaasshh process. This
differs from $$$$ under certain circumstances, such as subshells
that do not require bbaasshh to be re-initialized. Assignments to
BBAASSHHPPIIDD have no effect. If BBAASSHHPPIIDD is unset, it loses its spe-
cial properties, even if it is subsequently reset.
BBAASSHH__AALLIIAASSEESS
An associative array variable whose members correspond to the
internal list of aliases as maintained by the aalliiaass builtin.
Elements added to this array appear in the alias list; however,
unsetting array elements currently does not remove aliases from
the alias list. If BBAASSHH__AALLIIAASSEESS is unset, it loses its special
properties, even if it is subsequently reset.
BBAASSHH__AARRGGCC
An array variable whose values are the number of parameters in
each frame of the current bbaasshh execution call stack. The number
of parameters to the current subroutine (shell function or
script executed with .. or ssoouurrccee) is at the top of the stack.
When a subroutine is executed, the number of parameters passed
is pushed onto BBAASSHH__AARRGGCC. The shell sets BBAASSHH__AARRGGCC only when in
extended debugging mode (see the description of the eexxttddeebbuugg op-
tion to the sshhoopptt builtin below). Setting eexxttddeebbuugg after the
shell has started to execute a script, or referencing this vari-
able when eexxttddeebbuugg is not set, may result in inconsistent val-
ues. Assignments to BBAASSHH__AARRGGCC have no effect, and it may not be
unset.
BBAASSHH__AARRGGVV
An array variable containing all of the parameters in the cur-
rent bbaasshh execution call stack. The final parameter of the last
subroutine call is at the top of the stack; the first parameter
of the initial call is at the bottom. When a subroutine is exe-
cuted, the shell pushes the supplied parameters onto BBAASSHH__AARRGGVV.
The shell sets BBAASSHH__AARRGGVV only when in extended debugging mode
(see the description of the eexxttddeebbuugg option to the sshhoopptt builtin
below). Setting eexxttddeebbuugg after the shell has started to execute
a script, or referencing this variable when eexxttddeebbuugg is not set,
may result in inconsistent values. Assignments to BBAASSHH__AARRGGVV
have no effect, and it may not be unset.
BBAASSHH__AARRGGVV00
When referenced, this variable expands to the name of the shell
or shell script (identical to $$00; see the description of special
parameter 0 above). Assigning a value to BBAASSHH__AARRGGVV00 sets $$00 to
the same value. If BBAASSHH__AARRGGVV00 is unset, it loses its special
properties, even if it is subsequently reset.
BBAASSHH__CCMMDDSS
An associative array variable whose members correspond to the
internal hash table of commands as maintained by the hhaasshh
builtin. Adding elements to this array makes them appear in the
hash table; however, unsetting array elements currently does not
remove command names from the hash table. If BBAASSHH__CCMMDDSS is un-
set, it loses its special properties, even if it is subsequently
reset.
BBAASSHH__CCOOMMMMAANNDD
Expands to the command currently being executed or about to be
executed, unless the shell is executing a command as the result
of a trap, in which case it is the command executing at the time
of the trap. If BBAASSHH__CCOOMMMMAANNDD is unset, it loses its special
properties, even if it is subsequently reset.
BBAASSHH__EEXXEECCUUTTIIOONN__SSTTRRIINNGG
The command argument to the --cc invocation option.
BBAASSHH__LLIINNEENNOO
An array variable whose members are the line numbers in source
files where each corresponding member of FFUUNNCCNNAAMMEE was invoked.
$${{BBAASSHH__LLIINNEENNOO[[_$_i]]}} is the line number in the source file
($${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}}) where $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called (or
$${{BBAASSHH__LLIINNEENNOO[[_$_i_-_1]]}} if referenced within another shell func-
tion). Use LLIINNEENNOO to obtain the current line number. Assign-
ments to BBAASSHH__LLIINNEENNOO have no effect, and it may not be unset.
BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH
A colon-separated list of directories in which the eennaabbllee com-
mand looks for dynamically loadable builtins.
BBAASSHH__MMOONNOOSSEECCOONNDDSS
Each time this variable is referenced, it expands to the value
returned by the system's monotonic clock, if one is available.
If there is no monotonic clock, this is equivalent to EEPPOOCCHHSSEECC--
OONNDDSS. If BBAASSHH__MMOONNOOSSEECCOONNDDSS is unset, it loses its special prop-
erties, even if it is subsequently reset.
BBAASSHH__RREEMMAATTCCHH
An array variable whose members are assigned by the ==~~ binary
operator to the [[[[ conditional command. The element with index
0 is the portion of the string matching the entire regular ex-
pression. The element with index _n is the portion of the string
matching the _nth parenthesized subexpression.
BBAASSHH__SSOOUURRCCEE
An array variable whose members are the source filenames where
the corresponding shell function names in the FFUUNNCCNNAAMMEE array
variable are defined. The shell function $${{FFUUNNCCNNAAMMEE[[_$_i]]}} is de-
fined in the file $${{BBAASSHH__SSOOUURRCCEE[[_$_i]]}} and called from
$${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}}. Assignments to BBAASSHH__SSOOUURRCCEE have no ef-
fect, and it may not be unset.
BBAASSHH__SSUUBBSSHHEELLLL
Incremented by one within each subshell or subshell environment
when the shell begins executing in that environment. The ini-
tial value is 0. If BBAASSHH__SSUUBBSSHHEELLLL is unset, it loses its spe-
cial properties, even if it is subsequently reset.
BBAASSHH__TTRRAAPPSSIIGG
Set to the signal number corresponding to the trap action being
executed during its execution. See the description of ttrraapp un-
der SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below for information about signal
numbers and trap execution.
BBAASSHH__VVEERRSSIINNFFOO
A readonly array variable whose members hold version information
for this instance of bbaasshh. The values assigned to the array
members are as follows:
BBAASSHH__VVEERRSSIINNFFOO[[0]] The major version number (the _r_e_l_e_a_s_e).
BBAASSHH__VVEERRSSIINNFFOO[[1]] The minor version number (the _v_e_r_s_i_o_n).
BBAASSHH__VVEERRSSIINNFFOO[[2]] The patch level.
BBAASSHH__VVEERRSSIINNFFOO[[3]] The build version.
BBAASSHH__VVEERRSSIINNFFOO[[4]] The release status (e.g., _b_e_t_a).
BBAASSHH__VVEERRSSIINNFFOO[[5]] The value of MMAACCHHTTYYPPEE.
BBAASSHH__VVEERRSSIIOONN
Expands to a string describing the version of this instance of
bbaasshh (e.g., 5.2.37(3)-release).
CCOOMMPP__CCWWOORRDD
An index into $${{CCOOMMPP__WWOORRDDSS}} of the word containing the current
cursor position. This variable is available only in shell func-
tions invoked by the programmable completion facilities (see
PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
CCOOMMPP__KKEEYY
The key (or final key of a key sequence) used to invoke the cur-
rent completion function. This variable is available only in
shell functions and external commands invoked by the programma-
ble completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
CCOOMMPP__LLIINNEE
The current command line. This variable is available only in
shell functions and external commands invoked by the programma-
ble completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
CCOOMMPP__PPOOIINNTT
The index of the current cursor position relative to the begin-
ning of the current command. If the current cursor position is
at the end of the current command, the value of this variable is
equal to $${{##CCOOMMPP__LLIINNEE}}. This variable is available only in
shell functions and external commands invoked by the programma-
ble completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
CCOOMMPP__TTYYPPEE
Set to an integer value corresponding to the type of attempted
completion that caused a completion function to be called: _T_A_B,
for normal completion, _?, for listing completions after succes-
sive tabs, _!, for listing alternatives on partial word comple-
tion, _@, to list completions if the word is not unmodified, or
_%, for menu completion. This variable is available only in
shell functions and external commands invoked by the programma-
ble completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
CCOOMMPP__WWOORRDDBBRREEAAKKSS
The set of characters that the rreeaaddlliinnee library treats as word
separators when performing word completion. If CCOOMMPP__WWOORRDDBBRREEAAKKSS
is unset, it loses its special properties, even if it is subse-
quently reset.
CCOOMMPP__WWOORRDDSS
An array variable (see AArrrraayyss below) consisting of the individ-
ual words in the current command line. The line is split into
words as rreeaaddlliinnee would split it, using CCOOMMPP__WWOORRDDBBRREEAAKKSS as de-
scribed above. This variable is available only in shell func-
tions invoked by the programmable completion facilities (see
PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
CCOOPPRROOCC An array variable (see AArrrraayyss below) created to hold the file
descriptors for output from and input to an unnamed coprocess
(see CCoopprroocceesssseess above).
DDIIRRSSTTAACCKK
An array variable (see AArrrraayyss below) containing the current con-
tents of the directory stack. Directories appear in the stack
in the order they are displayed by the ddiirrss builtin. Assigning
to members of this array variable may be used to modify directo-
ries already in the stack, but the ppuusshhdd and ppooppdd builtins must
be used to add and remove directories. Assigning to this vari-
able does not change the current directory. If DDIIRRSSTTAACCKK is un-
set, it loses its special properties, even if it is subsequently
reset.
EEPPOOCCHHRREEAALLTTIIMMEE
Each time this parameter is referenced, it expands to the number
of seconds since the Unix Epoch (see _t_i_m_e(3)) as a floating-
point value with micro-second granularity. Assignments to
EEPPOOCCHHRREEAALLTTIIMMEE are ignored. If EEPPOOCCHHRREEAALLTTIIMMEE is unset, it loses
its special properties, even if it is subsequently reset.
EEPPOOCCHHSSEECCOONNDDSS
Each time this parameter is referenced, it expands to the number
of seconds since the Unix Epoch (see _t_i_m_e(3)). Assignments to
EEPPOOCCHHSSEECCOONNDDSS are ignored. If EEPPOOCCHHSSEECCOONNDDSS is unset, it loses
its special properties, even if it is subsequently reset.
EEUUIIDD Expands to the effective user ID of the current user, initial-
ized at shell startup. This variable is readonly.
FFUUNNCCNNAAMMEE
An array variable containing the names of all shell functions
currently in the execution call stack. The element with index 0
is the name of any currently-executing shell function. The bot-
tom-most element (the one with the highest index) is "main".
This variable exists only when a shell function is executing.
Assignments to FFUUNNCCNNAAMMEE have no effect. If FFUUNNCCNNAAMMEE is unset,
it loses its special properties, even if it is subsequently re-
set.
This variable can be used with BBAASSHH__LLIINNEENNOO and BBAASSHH__SSOOUURRCCEE.
Each element of FFUUNNCCNNAAMMEE has corresponding elements in
BBAASSHH__LLIINNEENNOO and BBAASSHH__SSOOUURRCCEE to describe the call stack. For in-
stance, $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called from the file
$${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}} at line number $${{BBAASSHH__LLIINNEENNOO[[_$_i]]}}. The
ccaalllleerr builtin displays the current call stack using this infor-
mation.
GGRROOUUPPSS An array variable containing the list of groups of which the
current user is a member. Assignments to GGRROOUUPPSS have no effect.
If GGRROOUUPPSS is unset, it loses its special properties, even if it
is subsequently reset.
HHIISSTTCCMMDD
The history number, or index in the history list, of the current
command. Assignments to HHIISSTTCCMMDD have no effect. If HHIISSTTCCMMDD is
unset, it loses its special properties, even if it is subse-
quently reset.
HHOOSSTTNNAAMMEE
Automatically set to the name of the current host.
HHOOSSTTTTYYPPEE
Automatically set to a string that uniquely describes the type
of machine on which bbaasshh is executing. The default is system-
dependent.
LLIINNEENNOO Each time this parameter is referenced, the shell substitutes a
decimal number representing the current sequential line number
(starting with 1) within a script or function. When not in a
script or function, the value substituted is not guaranteed to
be meaningful. If LLIINNEENNOO is unset, it loses its special proper-
ties, even if it is subsequently reset.
MMAACCHHTTYYPPEE
Automatically set to a string that fully describes the system
type on which bbaasshh is executing, in the standard GNU _c_p_u_-_c_o_m_-
_p_a_n_y_-_s_y_s_t_e_m format. The default is system-dependent.
MMAAPPFFIILLEE
An array variable (see AArrrraayyss below) created to hold the text
read by the mmaappffiillee builtin when no variable name is supplied.
OOLLDDPPWWDD The previous working directory as set by the ccdd command.
OOPPTTAARRGG The value of the last option argument processed by the ggeettooppttss
builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
OOPPTTIINNDD The index of the next argument to be processed by the ggeettooppttss
builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
OOSSTTYYPPEE Automatically set to a string that describes the operating sys-
tem on which bbaasshh is executing. The default is system-depen-
dent.
PPIIPPEESSTTAATTUUSS
An array variable (see AArrrraayyss below) containing a list of exit
status values from the commands in the most-recently-executed
foreground pipeline, which may consist of only a simple command
(see SSHHEELLLL GGRRAAMMMMAARR above). BBaasshh sets PPIIPPEESSTTAATTUUSS after executing
multi-element pipelines, timed and negated pipelines, simple
commands, subshells created with the ( operator, the [[[[ and ((((
compound commands, and after error conditions that result in the
shell aborting command execution.
PPPPIIDD The process ID of the shell's parent. This variable is read-
only.
PPWWDD The current working directory as set by the ccdd command.
RRAANNDDOOMM Each time this parameter is referenced, it expands to a random
integer between 0 and 32767. Assigning a value to RRAANNDDOOMM ini-
tializes (seeds) the sequence of random numbers. Seeding the
random number generator with the same constant value produces
the same sequence of values. If RRAANNDDOOMM is unset, it loses its
special properties, even if it is subsequently reset.
RREEAADDLLIINNEE__AARRGGUUMMEENNTT
Any numeric argument given to a rreeaaddlliinnee command that was de-
fined using "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) when it
was invoked.
RREEAADDLLIINNEE__LLIINNEE
The contents of the rreeaaddlliinnee line buffer, for use with "bind -x"
(see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
RREEAADDLLIINNEE__MMAARRKK
The position of the mark (saved insertion point) in the rreeaaddlliinnee
line buffer, for use with "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
below). The characters between the insertion point and the mark
are often called the _r_e_g_i_o_n.
RREEAADDLLIINNEE__PPOOIINNTT
The position of the insertion point in the rreeaaddlliinnee line buffer,
for use with "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
RREEPPLLYY Set to the line of input read by the rreeaadd builtin command when
no arguments are supplied.
SSEECCOONNDDSS
Each time this parameter is referenced, it expands to the number
of seconds since shell invocation. If a value is assigned to
SSEECCOONNDDSS, the value returned upon subsequent references is the
number of seconds since the assignment plus the value assigned.
The number of seconds at shell invocation and the current time
are always determined by querying the system clock at one-second
resolution. If SSEECCOONNDDSS is unset, it loses its special proper-
ties, even if it is subsequently reset.
SSHHEELLLLOOPPTTSS
A colon-separated list of enabled shell options. Each word in
the list is a valid argument for the --oo option to the sseett
builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options
appearing in SSHHEELLLLOOPPTTSS are those reported as _o_n by sseett --oo. If
this variable is in the environment when bbaasshh starts up, the
shell enables each option in the list before reading any startup
files. If this variable is exported, child shells will enable
each option in the list. This variable is read-only.
SSHHLLVVLL Incremented by one each time an instance of bbaasshh is started.
SSRRAANNDDOOMM
Each time it is referenced, this variable expands to a 32-bit
pseudo-random number. The random number generator is not linear
on systems that support _/_d_e_v_/_u_r_a_n_d_o_m or _a_r_c_4_r_a_n_d_o_m(3), so each
returned number has no relationship to the numbers preceding it.
The random number generator cannot be seeded, so assignments to
this variable have no effect. If SSRRAANNDDOOMM is unset, it loses its
special properties, even if it is subsequently reset.
UUIIDD Expands to the user ID of the current user, initialized at shell
startup. This variable is readonly.
The shell uses the following variables. In some cases, bbaasshh assigns a
default value to a variable; these cases are noted below.
BBAASSHH__CCOOMMPPAATT
The value is used to set the shell's compatibility level. See
SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below for a description of the various
compatibility levels and their effects. The value may be a dec-
imal number (e.g., 4.2) or an integer (e.g., 42) corresponding
to the desired compatibility level. If BBAASSHH__CCOOMMPPAATT is unset or
set to the empty string, the compatibility level is set to the
default for the current version. If BBAASSHH__CCOOMMPPAATT is set to a
value that is not one of the valid compatibility levels, the
shell prints an error message and sets the compatibility level
to the default for the current version. A subset of the valid
values correspond to the compatibility levels described below
under SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE. For example, 4.2 and 42 are
valid values that correspond to the ccoommppaatt4422 sshhoopptt option and
set the compatibility level to 42. The current version is also
a valid value.
BBAASSHH__EENNVV
If this parameter is set when bbaasshh is executing a shell script,
its expanded value is interpreted as a filename containing com-
mands to initialize the shell before it reads and executes com-
mands from the script. The value of BBAASSHH__EENNVV is subjected to
parameter expansion, command substitution, and arithmetic expan-
sion before being interpreted as a filename. PPAATTHH is not used
to search for the resultant filename.
BBAASSHH__XXTTRRAACCEEFFDD
If set to an integer corresponding to a valid file descriptor,
bbaasshh writes the trace output generated when "set -x" is enabled
to that file descriptor, instead of the standard error. The
file descriptor is closed when BBAASSHH__XXTTRRAACCEEFFDD is unset or as-
signed a new value. Unsetting BBAASSHH__XXTTRRAACCEEFFDD or assigning it the
empty string causes the trace output to be sent to the standard
error. Note that setting BBAASSHH__XXTTRRAACCEEFFDD to 2 (the standard error
file descriptor) and then unsetting it will result in the stan-
dard error being closed.
CCDDPPAATTHH The search path for the ccdd command. This is a colon-separated
list of directories where the shell looks for directories speci-
fied as arguments to the ccdd command. A sample value is
".:~:/usr".
CCHHIILLDD__MMAAXX
Set the number of exited child status values for the shell to
remember. BBaasshh will not allow this value to be decreased below
a POSIX-mandated minimum, and there is a maximum value (cur-
rently 8192) that this may not exceed. The minimum value is
system-dependent.
CCOOLLUUMMNNSS
Used by the sseelleecctt compound command to determine the terminal
width when printing selection lists. Automatically set if the
cchheecckkwwiinnssiizzee option is enabled or in an interactive shell upon
receipt of a SSIIGGWWIINNCCHH.
CCOOMMPPRREEPPLLYY
An array variable from which bbaasshh reads the possible completions
generated by a shell function invoked by the programmable com-
pletion facility (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). Each ar-
ray element contains one possible completion.
EEMMAACCSS If bbaasshh finds this variable in the environment when the shell
starts with value "t", it assumes that the shell is running in
an Emacs shell buffer and disables line editing.
EENNVV Expanded and executed similarly to BBAASSHH__EENNVV (see IINNVVOOCCAATTIIOONN
above) when an interactive shell is invoked in posix mode.
EEXXEECCIIGGNNOORREE
A colon-separated list of shell patterns (see PPaatttteerrnn MMaattcchhiinngg)
defining the set of filenames to be ignored by command search
using PPAATTHH. Files whose full pathnames match one of these pat-
terns are not considered executable files for the purposes of
completion and command execution via PPAATTHH lookup. This does not
affect the behavior of the [[, tteesstt, and [[[[ commands. Full path-
names in the command hash table are not subject to EEXXEECCIIGGNNOORREE.
Use this variable to ignore shared library files that have the
executable bit set, but are not executable files. The pattern
matching honors the setting of the eexxttgglloobb shell option.
FFCCEEDDIITT The default editor for the ffcc builtin command.
FFIIGGNNOORREE
A colon-separated list of suffixes to ignore when performing
filename completion (see RREEAADDLLIINNEE below). A filename whose suf-
fix matches one of the entries in FFIIGGNNOORREE is excluded from the
list of matched filenames. A sample value is ".o:~".
FFUUNNCCNNEESSTT
If set to a numeric value greater than 0, defines a maximum
function nesting level. Function invocations that exceed this
nesting level cause the current command to abort.
GGLLOOBBIIGGNNOORREE
A colon-separated list of patterns defining the set of file
names to be ignored by pathname expansion. If a file name
matched by a pathname expansion pattern also matches one of the
patterns in GGLLOOBBIIGGNNOORREE, it is removed from the list of matches.
The pattern matching honors the setting of the eexxttgglloobb shell op-
tion.
GGLLOOBBSSOORRTT
Controls how the results of pathname expansion are sorted. The
value of this variable specifies the sort criteria and sort or-
der for the results of pathname expansion. If this variable is
unset or set to the null string, pathname expansion uses the
historical behavior of sorting by name, in ascending lexico-
graphic order as determined by the LLCC__CCOOLLLLAATTEE shell variable.
If set, a valid value begins with an optional _+, which is ig-
nored, or _-, which reverses the sort order from ascending to de-
scending, followed by a sort specifier. The valid sort speci-
fiers are _n_a_m_e, _n_u_m_e_r_i_c, _s_i_z_e, _m_t_i_m_e, _a_t_i_m_e, _c_t_i_m_e, and _b_l_o_c_k_s,
which sort the files on name, names in numeric rather than lexi-
cographic order, file size, modification time, access time, in-
ode change time, and number of blocks, respectively. If any of
the non-name keys compare as equal (e.g., if two files are the
same size), sorting uses the name as a secondary sort key.
For example, a value of _-_m_t_i_m_e sorts the results in descending
order by modification time (newest first).
The _n_u_m_e_r_i_c specifier treats names consisting solely of digits
as numbers and sorts them using their numeric value (so "2"
sorts before "10", for example). When using _n_u_m_e_r_i_c, names con-
taining non-digits sort after all the all-digit names and are
sorted by name using the traditional behavior.
A sort specifier of _n_o_s_o_r_t disables sorting completely; bbaasshh re-
turns the results in the order they are read from the file sys-
tem, ignoring any leading _-.
If the sort specifier is missing, it defaults to _n_a_m_e, so a
value of _+ is equivalent to the null string, and a value of _-
sorts by name in descending order. Any invalid value restores
the historical sorting behavior.
HHIISSTTCCOONNTTRROOLL
A colon-separated list of values controlling how commands are
saved on the history list. If the list of values includes
_i_g_n_o_r_e_s_p_a_c_e, lines which begin with a ssppaaccee character are not
saved in the history list. A value of _i_g_n_o_r_e_d_u_p_s causes lines
matching the previous history entry not to be saved. A value of
_i_g_n_o_r_e_b_o_t_h is shorthand for _i_g_n_o_r_e_s_p_a_c_e and _i_g_n_o_r_e_d_u_p_s. A value
of _e_r_a_s_e_d_u_p_s causes all previous lines matching the current line
to be removed from the history list before that line is saved.
Any value not in the above list is ignored. If HHIISSTTCCOONNTTRROOLL is
unset, or does not include a valid value, bbaasshh saves all lines
read by the shell parser on the history list, subject to the
value of HHIISSTTIIGGNNOORREE. If the first line of a multi-line compound
command was saved, the second and subsequent lines are not
tested, and are added to the history regardless of the value of
HHIISSTTCCOONNTTRROOLL. If the first line was not saved, the second and
subsequent lines of the command are not saved either.
HHIISSTTFFIILLEE
The name of the file in which command history is saved (see HHIISS--
TTOORRYY below). BBaasshh assigns a default value of _~_/_._b_a_s_h___h_i_s_t_o_r_y.
If HHIISSTTFFIILLEE is unset or null, the shell does not save the com-
mand history when it exits.
HHIISSTTFFIILLEESSIIZZEE
The maximum number of lines contained in the history file. When
this variable is assigned a value, the history file is trun-
cated, if necessary, to contain no more than the number of his-
tory entries that total no more than that number of lines by re-
moving the oldest entries. If the history list contains multi-
line entries, the history file may contain more lines than this
maximum to avoid leaving partial history entries. The history
file is also truncated to this size after writing it when a
shell exits or by the hhiissttoorryy builtin. If the value is 0, the
history file is truncated to zero size. Non-numeric values and
numeric values less than zero inhibit truncation. The shell
sets the default value to the value of HHIISSTTSSIIZZEE after reading
any startup files.
HHIISSTTIIGGNNOORREE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. If a command line
matches one of the patterns in the value of HHIISSTTIIGGNNOORREE, it is
not saved on the history list. Each pattern is anchored at the
beginning of the line and must match the complete line (bbaasshh
does not implicitly append a "**"). Each pattern is tested
against the line after the checks specified by HHIISSTTCCOONNTTRROOLL are
applied. In addition to the normal shell pattern matching char-
acters, "&&" matches the previous history line. A backslash es-
capes the "&&"; the backslash is removed before attempting a
match. If the first line of a multi-line compound command was
saved, the second and subsequent lines are not tested, and are
added to the history regardless of the value of HHIISSTTIIGGNNOORREE. If
the first line was not saved, the second and subsequent lines of
the command are not saved either. The pattern matching honors
the setting of the eexxttgglloobb shell option.
HHIISSTTIIGGNNOORREE subsumes some of the function of HHIISSTTCCOONNTTRROOLL. A pat-
tern of "&" is identical to "ignoredups", and a pattern of "[
]*" is identical to "ignorespace". Combining these two pat-
terns, separating them with a colon, provides the functionality
of "ignoreboth".
HHIISSTTSSIIZZEE
The number of commands to remember in the command history (see
HHIISSTTOORRYY below). If the value is 0, commands are not saved in
the history list. Numeric values less than zero result in every
command being saved on the history list (there is no limit).
The shell sets the default value to 500 after reading any
startup files.
HHIISSTTTTIIMMEEFFOORRMMAATT
If this variable is set and not null, its value is used as a
format string for _s_t_r_f_t_i_m_e(3) to print the time stamp associated
with each history entry displayed by the hhiissttoorryy builtin. If
this variable is set, the shell writes time stamps to the his-
tory file so they may be preserved across shell sessions. This
uses the history comment character to distinguish timestamps
from other history lines.
HHOOMMEE The home directory of the current user; the default argument for
the ccdd builtin command. The value of this variable is also used
when performing tilde expansion.
HHOOSSTTFFIILLEE
Contains the name of a file in the same format as _/_e_t_c_/_h_o_s_t_s
that should be read when the shell needs to complete a hostname.
The list of possible hostname completions may be changed while
the shell is running; the next time hostname completion is at-
tempted after the value is changed, bbaasshh adds the contents of
the new file to the existing list. If HHOOSSTTFFIILLEE is set, but has
no value, or does not name a readable file, bbaasshh attempts to
read _/_e_t_c_/_h_o_s_t_s to obtain the list of possible hostname comple-
tions. When HHOOSSTTFFIILLEE is unset, bbaasshh clears the hostname list.
IIFFSS The _I_n_t_e_r_n_a_l _F_i_e_l_d _S_e_p_a_r_a_t_o_r that is used for word splitting af-
ter expansion and to split lines into words with the rreeaadd
builtin command. Word splitting is described below under EEXXPPAANN--
SSIIOONN. The default value is "<space><tab><newline>".
IIGGNNOORREEEEOOFF
Controls the action of an interactive shell on receipt of an EEOOFF
character as the sole input. If set, the value is the number of
consecutive EEOOFF characters which must be typed as the first
characters on an input line before bbaasshh exits. If the variable
is set but does not have a numeric value, or the value is null,
the default value is 10. If it is unset, EEOOFF signifies the end
of input to the shell.
IINNPPUUTTRRCC
The filename for the rreeaaddlliinnee startup file, overriding the de-
fault of _~_/_._i_n_p_u_t_r_c (see RREEAADDLLIINNEE below).
IINNSSIIDDEE__EEMMAACCSS
If this variable appears in the environment when the shell
starts, bbaasshh assumes that it is running inside an Emacs shell
buffer and may disable line editing, depending on the value of
TTEERRMM.
LLAANNGG Used to determine the locale category for any category not
specifically selected with a variable starting with LLCC__.
LLCC__AALLLL This variable overrides the value of LLAANNGG and any other LLCC__
variable specifying a locale category.
LLCC__CCOOLLLLAATTEE
This variable determines the collation order used when sorting
the results of pathname expansion, and determines the behavior
of range expressions, equivalence classes, and collating se-
quences within pathname expansion and pattern matching.
LLCC__CCTTYYPPEE
This variable determines the interpretation of characters and
the behavior of character classes within pathname expansion and
pattern matching.
LLCC__MMEESSSSAAGGEESS
This variable determines the locale used to translate double-
quoted strings preceded by a $$.
LLCC__NNUUMMEERRIICC
This variable determines the locale category used for number
formatting.
LLCC__TTIIMMEE
This variable determines the locale category used for data and
time formatting.
LLIINNEESS Used by the sseelleecctt compound command to determine the column
length for printing selection lists. Automatically set if the
cchheecckkwwiinnssiizzee option is enabled or in an interactive shell upon
receipt of a SSIIGGWWIINNCCHH.
MMAAIILL If the value is set to a file or directory name and the MMAAIILLPPAATTHH
variable is not set, bbaasshh informs the user of the arrival of
mail in the specified file or Maildir-format directory.
MMAAIILLCCHHEECCKK
Specifies how often (in seconds) bbaasshh checks for mail. The de-
fault is 60 seconds. When it is time to check for mail, the
shell does so before displaying the primary prompt. If this
variable is unset, or set to a value that is not a number
greater than or equal to zero, the shell disables mail checking.
MMAAIILLPPAATTHH
A colon-separated list of filenames to be checked for mail. The
message to be printed when mail arrives in a particular file may
be specified by separating the filename from the message with a
"?". When used in the text of the message, $$__ expands to the
name of the current mailfile. For example:
MMAAIILLPPAATTHH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'
BBaasshh can be configured to supply a default value for this vari-
able (there is no value by default), but the location of the
user mail files that it uses is system dependent (e.g.,
/var/mail/$$UUSSEERR).
OOPPTTEERRRR If set to the value 1, bbaasshh displays error messages generated by
the ggeettooppttss builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
OOPPTTEERRRR is initialized to 1 each time the shell is invoked or a
shell script is executed.
PPAATTHH The search path for commands. It is a colon-separated list of
directories in which the shell looks for commands (see CCOOMMMMAANNDD
EEXXEECCUUTTIIOONN below). A zero-length (null) directory name in the
value of PPAATTHH indicates the current directory. A null directory
name may appear as two adjacent colons, or as an initial or
trailing colon. The default path is system-dependent, and is
set by the administrator who installs bbaasshh. A common value is
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
PPOOSSIIXXLLYY__CCOORRRREECCTT
If this variable is in the environment when bbaasshh starts, the
shell enters posix mode before reading the startup files, as if
the ----ppoossiixx invocation option had been supplied. If it is set
while the shell is running, bbaasshh enables posix mode, as if the
command "set -o posix" had been executed. When the shell enters
posix mode, it sets this variable if it was not already set.
PPRROOMMPPTT__CCOOMMMMAANNDD
If this variable is set, and is an array, the value of each set
element is executed as a command prior to issuing each primary
prompt. If this is set but not an array variable, its value is
used as a command to execute instead.
PPRROOMMPPTT__DDIIRRTTRRIIMM
If set to a number greater than zero, the value is used as the
number of trailing directory components to retain when expanding
the \\ww and \\WW prompt string escapes (see PPRROOMMPPTTIINNGG below).
Characters removed are replaced with an ellipsis.
PPSS00 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below)
and displayed by interactive shells after reading a command and
before the command is executed.
PPSS11 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below)
and used as the primary prompt string. The default value is
"\s-\v\$ ".
PPSS22 The value of this parameter is expanded as with PPSS11 and used as
the secondary prompt string. The default is "> ".
PPSS33 The value of this parameter is used as the prompt for the sseelleecctt
command (see SSHHEELLLL GGRRAAMMMMAARR above).
PPSS44 The value of this parameter is expanded as with PPSS11 and the
value is printed before each command bbaasshh displays during an ex-
ecution trace. The first character of the expanded value of PPSS44
is replicated multiple times, as necessary, to indicate multiple
levels of indirection. The default is "+ ".
SSHHEELLLL This variable expands to the full pathname to the shell. If it
is not set when the shell starts, bbaasshh assigns to it the full
pathname of the current user's login shell.
TTIIMMEEFFOORRMMAATT
The value of this parameter is used as a format string specify-
ing how the timing information for pipelines prefixed with the
ttiimmee reserved word should be displayed. The %% character intro-
duces an escape sequence that is expanded to a time value or
other information. The escape sequences and their meanings are
as follows; the brackets denote optional portions.
%%%% A literal %%.
%%[[_p]][[ll]]RR The elapsed time in seconds.
%%[[_p]][[ll]]UU The number of CPU seconds spent in user mode.
%%[[_p]][[ll]]SS The number of CPU seconds spent in system mode.
%%PP The CPU percentage, computed as (%U + %S) / %R.
The optional _p is a digit specifying the _p_r_e_c_i_s_i_o_n, the number
of fractional digits after a decimal point. A value of 0 causes
no decimal point or fraction to be output. ttiimmee prints at most
six digits after the decimal point; values of _p greater than 6
are changed to 6. If _p is not specified, ttiimmee prints three dig-
its after the decimal point.
The optional ll specifies a longer format, including minutes, of
the form _M_Mm_S_S._F_Fs. The value of _p determines whether or not
the fraction is included.
If this variable is not set, bbaasshh acts as if it had the value
$$''\\nnrreeaall\\tt%%33llRR\\nnuusseerr\\tt%%33llUU\\nnssyyss\\tt%%33llSS''. If the value is null,
bbaasshh does not display any timing information. A trailing new-
line is added when the format string is displayed.
TTMMOOUUTT If set to a value greater than zero, the rreeaadd builtin uses the
value as its default timeout. The sseelleecctt command terminates if
input does not arrive after TTMMOOUUTT seconds when input is coming
from a terminal. In an interactive shell, the value is inter-
preted as the number of seconds to wait for a line of input af-
ter issuing the primary prompt. BBaasshh terminates after waiting
for that number of seconds if a complete line of input does not
arrive.
TTMMPPDDIIRR If set, bbaasshh uses its value as the name of a directory in which
bbaasshh creates temporary files for the shell's use.
aauuttoo__rreessuummee
This variable controls how the shell interacts with the user and
job control. If this variable is set, simple commands consist-
ing of only a single word, without redirections, are treated as
candidates for resumption of an existing stopped job. There is
no ambiguity allowed; if there is more than one job beginning
with or containing the word, this selects the most recently ac-
cessed job. The _n_a_m_e of a stopped job, in this context, is the
command line used to start it, as displayed by jjoobbss. If set to
the value _e_x_a_c_t, the word must match the name of a stopped job
exactly; if set to _s_u_b_s_t_r_i_n_g, the word needs to match a sub-
string of the name of a stopped job. The _s_u_b_s_t_r_i_n_g value pro-
vides functionality analogous to the %%?? job identifier (see JJOOBB
CCOONNTTRROOLL below). If set to any other value (e.g., _p_r_e_f_i_x), the
word must be a prefix of a stopped job's name; this provides
functionality analogous to the %%_s_t_r_i_n_g job identifier.
hhiissttcchhaarrss
The two or three characters which control history expansion,
quick substitution, and tokenization (see HHIISSTTOORRYY EEXXPPAANNSSIIOONN be-
low). The first character is the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character,
the character which begins a history expansion, normally "!!".
The second character is the _q_u_i_c_k _s_u_b_s_t_i_t_u_t_i_o_n character, nor-
mally "^^". When it appears as the first character on the line,
history substitution repeats the previous command, replacing one
string with another. The optional third character is the _h_i_s_-
_t_o_r_y _c_o_m_m_e_n_t character, normally "##", which indicates that the
remainder of the line is a comment when it appears as the first
character of a word. The history comment character disables
history substitution for the remaining words on the line. It
does not necessarily cause the shell parser to treat the rest of
the line as a comment.
AArrrraayyss
BBaasshh provides one-dimensional indexed and associative array variables.
Any variable may be used as an indexed array; the ddeeccllaarree builtin ex-
plicitly declares an array. There is no maximum limit on the size of
an array, nor any requirement that members be indexed or assigned con-
tiguously. Indexed arrays are referenced using arithmetic expressions
that must expand to an integer (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN below) and
are zero-based; associative arrays are referenced using arbitrary
strings. Unless otherwise noted, indexed array indices must be non-
negative integers.
The shell performs parameter and variable expansion, arithmetic expan-
sion, command substitution, and quote removal on indexed array sub-
scripts. Since this can potentially result in empty strings, subscript
indexing treats those as expressions that evaluate to 0.
The shell performs tilde expansion, parameter and variable expansion,
arithmetic expansion, command substitution, and quote removal on asso-
ciative array subscripts. Empty strings cannot be used as associative
array keys.
BBaasshh automatically creates an indexed array if any variable is assigned
to using the syntax
_n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e .
The _s_u_b_s_c_r_i_p_t is treated as an arithmetic expression that must evaluate
to a number greater than or equal to zero. To explicitly declare an
indexed array, use
ddeeccllaarree --aa _n_a_m_e
(see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
ddeeccllaarree --aa _n_a_m_e[_s_u_b_s_c_r_i_p_t]
is also accepted; the _s_u_b_s_c_r_i_p_t is ignored.
Associative arrays are created using
ddeeccllaarree --AA _n_a_m_e
.
Attributes may be specified for an array variable using the ddeeccllaarree and
rreeaaddoonnllyy builtins. Each attribute applies to all members of an array.
Arrays are assigned using compound assignments of the form _n_a_m_e=((value_1
... value_n)), where each _v_a_l_u_e may be of the form [_s_u_b_s_c_r_i_p_t]=_s_t_r_i_n_g.
Indexed array assignments do not require anything but _s_t_r_i_n_g. Each
_v_a_l_u_e in the list is expanded using the shell expansions described be-
low under EEXXPPAANNSSIIOONN, but _v_a_l_u_es that are valid variable assignments in-
cluding the brackets and subscript do not undergo brace expansion and
word splitting, as with individual variable assignments.
When assigning to indexed arrays, if the optional brackets and sub-
script are supplied, that index is assigned to; otherwise the index of
the element assigned is the last index assigned to by the statement
plus one. Indexing starts at zero.
When assigning to an associative array, the words in a compound assign-
ment may be either assignment statements, for which the subscript is
required, or a list of words that is interpreted as a sequence of al-
ternating keys and values: _n_a_m_e=(( _k_e_y_1 _v_a_l_u_e_1 _k_e_y_2 _v_a_l_u_e_2 ...)). These
are treated identically to _n_a_m_e=(( [_k_e_y_1]=_v_a_l_u_e_1 [_k_e_y_2]=_v_a_l_u_e_2 ...)).
The first word in the list determines how the remaining words are in-
terpreted; all assignments in a list must be of the same type. When
using key/value pairs, the keys may not be missing or empty; a final
missing value is treated like the empty string.
This syntax is also accepted by the ddeeccllaarree builtin. Individual array
elements may be assigned to using the _n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e syntax in-
troduced above.
When assigning to an indexed array, if _n_a_m_e is subscripted by a nega-
tive number, that number is interpreted as relative to one greater than
the maximum index of _n_a_m_e, so negative indices count back from the end
of the array, and an index of -1 references the last element.
The "+=" operator appends to an array variable when assigning using the
compound assignment syntax; see PPAARRAAMMEETTEERRSS above.
An array element is referenced using ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. The braces
are required to avoid conflicts with pathname expansion. If _s_u_b_s_c_r_i_p_t
is @@ or **, the word expands to all members of _n_a_m_e, unless noted in the
description of a builtin or word expansion. These subscripts differ
only when the word appears within double quotes. If the word is dou-
ble-quoted, ${_n_a_m_e[*]} expands to a single word with the value of each
array member separated by the first character of the IIFFSS special vari-
able, and ${_n_a_m_e[@]} expands each element of _n_a_m_e to a separate word.
When there are no array members, ${_n_a_m_e[@]} expands to nothing. If the
double-quoted expansion occurs within a word, the expansion of the
first parameter is joined with the beginning part of the expansion of
the original word, and the expansion of the last parameter is joined
with the last part of the expansion of the original word. This is
analogous to the expansion of the special parameters ** and @@ (see SSppee--
cciiaall PPaarraammeetteerrss above).
${#_n_a_m_e[_s_u_b_s_c_r_i_p_t]} expands to the length of ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. If
_s_u_b_s_c_r_i_p_t is ** or @@, the expansion is the number of elements in the ar-
ray.
If the _s_u_b_s_c_r_i_p_t used to reference an element of an indexed array eval-
uates to a number less than zero, it is interpreted as relative to one
greater than the maximum index of the array, so negative indices count
back from the end of the array, and an index of -1 references the last
element.
Referencing an array variable without a subscript is equivalent to ref-
erencing the array with a subscript of 0. Any reference to a variable
using a valid subscript is valid; bbaasshh creates an array if necessary.
An array variable is considered set if a subscript has been assigned a
value. The null string is a valid value.
It is possible to obtain the keys (indices) of an array as well as the
values. ${!!_n_a_m_e[_@]} and ${!!_n_a_m_e[_*]} expand to the indices assigned in
array variable _n_a_m_e. The treatment when in double quotes is similar to
the expansion of the special parameters _@ and _* within double quotes.
The uunnsseett builtin is used to destroy arrays. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t] un-
sets the array element at index _s_u_b_s_c_r_i_p_t, for both indexed and asso-
ciative arrays. Negative subscripts to indexed arrays are interpreted
as described above. Unsetting the last element of an array variable
does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an array, re-
moves the entire array. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t] behaves differently de-
pending on whether _n_a_m_e is an indexed or associative array when _s_u_b_-
_s_c_r_i_p_t is ** or @@. If _n_a_m_e is an associative array, this unsets the el-
ement with subscript ** or @@. If _n_a_m_e is an indexed array, unset re-
moves all of the elements but does not remove the array itself.
When using a variable name with a subscript as an argument to a com-
mand, such as with uunnsseett, without using the word expansion syntax de-
scribed above, (e.g., unset a[4]), the argument is subject to pathname
expansion. Quote the argument if pathname expansion is not desired
(e.g., unset 'a[4]').
The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to
specify an indexed array and a --AA option to specify an associative ar-
ray. If both options are supplied, --AA takes precedence. The rreeaadd
builtin accepts a --aa option to assign a list of words read from the
standard input to an array. The sseett and ddeeccllaarree builtins display array
values in a way that allows them to be reused as assignments. Other
builtins accept array name arguments as well (e.g., mmaappffiillee); see the
descriptions of individual builtins below for details. The shell pro-
vides a number of builtin array variables.
EEXXPPAANNSSIIOONN
Expansion is performed on the command line after it has been split into
words. The shell performs these expansions: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, _t_i_l_d_e _e_x_-
_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_t_i_o_n, _a_r_i_t_h_-
_m_e_t_i_c _e_x_p_a_n_s_i_o_n, _w_o_r_d _s_p_l_i_t_t_i_n_g, _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, and _q_u_o_t_e _r_e_m_o_v_a_l.
The order of expansions is: brace expansion; tilde expansion, parameter
and variable expansion, arithmetic expansion, and command substitution
(done in a left-to-right fashion); word splitting; pathname expansion;
and quote removal.
On systems that can support it, there is an additional expansion avail-
able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as
tilde, parameter, variable, and arithmetic expansion and command sub-
stitution.
_Q_u_o_t_e _r_e_m_o_v_a_l is always performed last. It removes quote characters
present in the original word, not ones resulting from one of the other
expansions, unless they have been quoted themselves.
Only brace expansion, word splitting, and pathname expansion can in-
crease the number of words of the expansion; other expansions expand a
single word to a single word. The only exceptions to this are the ex-
pansions of ""$$@@"" and ""$${{_n_a_m_e[[@@]]}}"", and, in most cases, $$** and
$${{_n_a_m_e[[**]]}} as explained above (see PPAARRAAMMEETTEERRSS).
BBrraaccee EExxppaannssiioonn
_B_r_a_c_e _e_x_p_a_n_s_i_o_n is a mechanism to generate arbitrary strings sharing a
common prefix and suffix, either of which can be empty. This mechanism
is similar to _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, but the filenames generated need not
exist. Patterns to be brace expanded are formed from an optional _p_r_e_-
_a_m_b_l_e, followed by either a series of comma-separated strings or a se-
quence expression between a pair of braces, followed by an optional
_p_o_s_t_s_c_r_i_p_t. The preamble is prefixed to each string contained within
the braces, and the postscript is then appended to each resulting
string, expanding left to right.
Brace expansions may be nested. The results of each expanded string
are not sorted; brace expansion preserves left to right order. For ex-
ample, a{{d,c,b}}e expands into "ade ace abe".
A sequence expression takes the form _x...._y[[...._i_n_c_r]], where _x and _y are
either integers or single letters, and _i_n_c_r, an optional increment, is
an integer. When integers are supplied, the expression expands to each
number between _x and _y, inclusive. If either _x or _y begins with a
zero, each generated term will contain the same number of digits, zero-
padding where necessary. When letters are supplied, the expression ex-
pands to each character lexicographically between _x and _y, inclusive,
using the C locale. Note that both _x and _y must be of the same type
(integer or letter). When the increment is supplied, it is used as the
difference between each term. The default increment is 1 or -1 as ap-
propriate.
Brace expansion is performed before any other expansions, and any char-
acters special to other expansions are preserved in the result. It is
strictly textual. BBaasshh does not apply any syntactic interpretation to
the context of the expansion or the text between the braces.
A correctly-formed brace expansion must contain unquoted opening and
closing braces, and at least one unquoted comma or a valid sequence ex-
pression. Any incorrectly formed brace expansion is left unchanged.
A "{" or Q , may be quoted with a backslash to prevent its being con-
sidered part of a brace expression. To avoid conflicts with parameter
expansion, the string "${" is not considered eligible for brace expan-
sion, and inhibits brace expansion until the closing "}".
This construct is typically used as shorthand when the common prefix of
the strings to be generated is longer than in the above example:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
or
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
Brace expansion introduces a slight incompatibility with historical
versions of sshh. sshh does not treat opening or closing braces specially
when they appear as part of a word, and preserves them in the output.
BBaasshh removes braces from words as a consequence of brace expansion.
For example, a word entered to sshh as "file{1,2}" appears identically in
the output. BBaasshh outputs that word as "file1 file2" after brace expan-
sion. Start bbaasshh with the ++BB option or disable brace expansion with
the ++BB option to the sseett command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) for
strict sshh compatibility.
TTiillddee EExxppaannssiioonn
If a word begins with an unquoted tilde character ("~~"), all of the
characters preceding the first unquoted slash (or all characters, if
there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. If none of
the characters in the tilde-prefix are quoted, the characters in the
tilde-prefix following the tilde are treated as a possible _l_o_g_i_n _n_a_m_e.
If this login name is the null string, the tilde is replaced with the
value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the tilde expands
to the home directory of the user executing the shell instead. Other-
wise, the tilde-prefix is replaced with the home directory associated
with the specified login name.
If the tilde-prefix is a "~+", the value of the shell variable PPWWDD re-
places the tilde-prefix. If the tilde-prefix is a "~-", the shell sub-
stitutes the value of the shell variable OOLLDDPPWWDD, if it is set. If the
characters following the tilde in the tilde-prefix consist of a number
_N, optionally prefixed by a "+" or a "-", the tilde-prefix is replaced
with the corresponding element from the directory stack, as it would be
displayed by the ddiirrss builtin invoked with the characters following the
tilde in the tilde-prefix as an argument. If the characters following
the tilde in the tilde-prefix consist of a number without a leading "+"
or "-", tilde expansion assumes "+".
The results of tilde expansion are treated as if they were quoted, so
the replacement is not subject to word splitting and pathname expan-
sion.
If the login name is invalid, or the tilde expansion fails, the tilde-
prefix is unchanged.
BBaasshh checks each variable assignment for unquoted tilde-prefixes imme-
diately following a :: or the first ==, and performs tilde expansion in
these cases. Consequently, one may use filenames with tildes in as-
signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex-
panded value.
BBaasshh also performs tilde expansion on words satisfying the conditions
of variable assignments (as described above under PPAARRAAMMEETTEERRSS) when they
appear as arguments to simple commands. BBaasshh does not do this, except
for the _d_e_c_l_a_r_a_t_i_o_n commands listed above, when in posix mode.
PPaarraammeetteerr EExxppaannssiioonn
The "$$" character introduces parameter expansion, command substitution,
or arithmetic expansion. The parameter name or symbol to be expanded
may be enclosed in braces, which are optional but serve to protect the
variable to be expanded from characters immediately following it which
could be interpreted as part of the name.
When braces are used, the matching ending brace is the first "}}" not
escaped by a backslash or within a quoted string, and not within an em-
bedded arithmetic expansion, command substitution, or parameter expan-
sion.
The basic form of parameter expansion is
${_p_a_r_a_m_e_t_e_r}
which substitutes the value of _p_a_r_a_m_e_t_e_r. The braces are required when
_p_a_r_a_m_e_t_e_r is a positional parameter with more than one digit, or when
_p_a_r_a_m_e_t_e_r is followed by a character which is not to be interpreted as
part of its name. The _p_a_r_a_m_e_t_e_r is a shell parameter as described
above PPAARRAAMMEETTEERRSS) or an array reference (AArrrraayyss).
If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), and
_p_a_r_a_m_e_t_e_r is not a _n_a_m_e_r_e_f, it introduces a level of indirection. BBaasshh
uses the value formed by expanding the rest of _p_a_r_a_m_e_t_e_r as the new _p_a_-
_r_a_m_e_t_e_r; this new parameter is then expanded and that value is used in
the rest of the expansion, rather than the expansion of the original
_p_a_r_a_m_e_t_e_r. This is known as _i_n_d_i_r_e_c_t _e_x_p_a_n_s_i_o_n. The value is subject
to tilde expansion, parameter expansion, command substitution, and
arithmetic expansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the
name of the parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the
complete indirect expansion, for compatibility. The exceptions to this
are the expansions of ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The
exclamation point must immediately follow the left brace in order to
introduce indirection.
In each of the cases below, _w_o_r_d is subject to tilde expansion, parame-
ter expansion, command substitution, and arithmetic expansion.
When not performing substring expansion, using the forms documented be-
low (e.g., ::--), bbaasshh tests for a parameter that is unset or null.
Omitting the colon tests only for a parameter that is unset.
${_p_a_r_a_m_e_t_e_r::--_w_o_r_d}
UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan-
sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r
is substituted.
${_p_a_r_a_m_e_t_e_r::==_w_o_r_d}
AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the ex-
pansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r, and the expansion is
the final value of _p_a_r_a_m_e_t_e_r. Positional parameters and special
parameters may not be assigned in this way.
${_p_a_r_a_m_e_t_e_r::??_w_o_r_d}
DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset,
the shell writes the expansion of _w_o_r_d (or a message to that ef-
fect if _w_o_r_d is not present) to the standard error and, if it is
not interactive, exits with a non-zero status. An interactive
shell does not exit, but does not execute the command associated
with the expansion. Otherwise, the value of _p_a_r_a_m_e_t_e_r is sub-
stituted.
${_p_a_r_a_m_e_t_e_r::++_w_o_r_d}
UUssee AAlltteerrnnaattee VVaalluuee. If _p_a_r_a_m_e_t_e_r is null or unset, nothing is
substituted, otherwise the expansion of _w_o_r_d is substituted.
The value of _p_a_r_a_m_e_t_e_r is not used.
${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t}
${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t::_l_e_n_g_t_h}
SSuubbssttrriinngg EExxppaannssiioonn. Expands to up to _l_e_n_g_t_h characters of the
value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_-
_s_e_t. If _p_a_r_a_m_e_t_e_r is @@ or **, an indexed array subscripted by @@
or **, or an associative array name, the results differ as de-
scribed below. If ::_l_e_n_g_t_h is omitted (the first form above),
this expands to the substring of the value of _p_a_r_a_m_e_t_e_r starting
at the character specified by _o_f_f_s_e_t and extending to the end of
the value. If _o_f_f_s_e_t is omitted, it is treated as 0. If _l_e_n_g_t_h
is omitted, but the colon after _o_f_f_s_e_t is present, it is treated
as 0. _l_e_n_g_t_h and _o_f_f_s_e_t are arithmetic expressions (see AARRIITTHH--
MMEETTIICC EEVVAALLUUAATTIIOONN below).
If _o_f_f_s_e_t evaluates to a number less than zero, the value is
used as an offset in characters from the end of the value of _p_a_-
_r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it is
interpreted as an offset in characters from the end of the value
of _p_a_r_a_m_e_t_e_r rather than a number of characters, and the expan-
sion is the characters between _o_f_f_s_e_t and that result. Note
that a negative offset must be separated from the colon by at
least one space to avoid being confused with the ::-- expansion.
If _p_a_r_a_m_e_t_e_r is @@ or **, the result is _l_e_n_g_t_h positional parame-
ters beginning at _o_f_f_s_e_t. A negative _o_f_f_s_e_t is taken relative
to one greater than the greatest positional parameter, so an
offset of -1 evaluates to the last positional parameter (or 0 if
there are no positional parameters). It is an expansion error
if _l_e_n_g_t_h evaluates to a number less than zero.
If _p_a_r_a_m_e_t_e_r is an indexed array name subscripted by @ or *, the
result is the _l_e_n_g_t_h members of the array beginning with ${_p_a_r_a_-
_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to one
greater than the maximum index of the specified array. It is an
expansion error if _l_e_n_g_t_h evaluates to a number less than zero.
Substring expansion applied to an associative array produces un-
defined results.
Substring indexing is zero-based unless the positional parame-
ters are used, in which case the indexing starts at 1 by de-
fault. If _o_f_f_s_e_t is 0, and the positional parameters are used,
$$00 is prefixed to the list.
${!!_p_r_e_f_i_x**}
${!!_p_r_e_f_i_x@@}
NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose
names begin with _p_r_e_f_i_x, separated by the first character of the
IIFFSS special variable. When _@ is used and the expansion appears
within double quotes, each variable name expands to a separate
word.
${!!_n_a_m_e[_@]}
${!!_n_a_m_e[_*]}
LLiisstt ooff aarrrraayy kkeeyyss. If _n_a_m_e is an array variable, expands to
the list of array indices (keys) assigned in _n_a_m_e. If _n_a_m_e is
not an array, expands to 0 if _n_a_m_e is set and null otherwise.
When _@ is used and the expansion appears within double quotes,
each key expands to a separate word.
${##_p_a_r_a_m_e_t_e_r}
PPaarraammeetteerr lleennggtthh. Substitutes the length in characters of the
expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_r_a_m_e_t_e_r is ** or @@, the value
substituted is the number of positional parameters. If _p_a_r_a_m_e_-
_t_e_r is an array name subscripted by ** or @@, the value substi-
tuted is the number of elements in the array. If _p_a_r_a_m_e_t_e_r is
an indexed array name subscripted by a negative number, that
number is interpreted as relative to one greater than the maxi-
mum index of _p_a_r_a_m_e_t_e_r, so negative indices count back from the
end of the array, and an index of -1 references the last ele-
ment.
${_p_a_r_a_m_e_t_e_r##_w_o_r_d}
${_p_a_r_a_m_e_t_e_r####_w_o_r_d}
RReemmoovvee mmaattcchhiinngg pprreeffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce
a pattern just as in pathname expansion, and matched against the
expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt--
tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of
the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the
expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern
(the "#" case) or the longest matching pattern (the "##" case)
deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal operation
is applied to each positional parameter in turn, and the expan-
sion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array variable
subscripted with @@ or **, the pattern removal operation is ap-
plied to each member of the array in turn, and the expansion is
the resultant list.
${_p_a_r_a_m_e_t_e_r%%_w_o_r_d}
${_p_a_r_a_m_e_t_e_r%%%%_w_o_r_d}
RReemmoovvee mmaattcchhiinngg ssuuffffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce
a pattern just as in pathname expansion, and matched against the
expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt--
tteerrnn MMaattcchhiinngg below. If the pattern matches a trailing portion
of the expanded value of _p_a_r_a_m_e_t_e_r, then the result of the ex-
pansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest
matching pattern (the "%" case) or the longest matching pattern
(the "%%" case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern
removal operation is applied to each positional parameter in
turn, and the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is
an array variable subscripted with @@ or **, the pattern removal
operation is applied to each member of the array in turn, and
the expansion is the resultant list.
${_p_a_r_a_m_e_t_e_r//_p_a_t_t_e_r_n//_s_t_r_i_n_g}
${_p_a_r_a_m_e_t_e_r////_p_a_t_t_e_r_n//_s_t_r_i_n_g}
${_p_a_r_a_m_e_t_e_r//##_p_a_t_t_e_r_n//_s_t_r_i_n_g}
${_p_a_r_a_m_e_t_e_r//%%_p_a_t_t_e_r_n//_s_t_r_i_n_g}
PPaatttteerrnn ssuubbssttiittuuttiioonn. The _p_a_t_t_e_r_n is expanded to produce a pat-
tern and matched against the expanded value of _p_a_r_a_m_e_t_e_r as de-
scribed under PPaatttteerrnn MMaattcchhiinngg below. The longest match of _p_a_t_-
_t_e_r_n in the expanded value is replaced with _s_t_r_i_n_g. _s_t_r_i_n_g un-
dergoes tilde expansion, parameter and variable expansion,
arithmetic expansion, command and process substitution, and
quote removal.
In the first form above, only the first match is replaced. If
there are two slashes separating _p_a_r_a_m_e_t_e_r and _p_a_t_t_e_r_n (the sec-
ond form above), all matches of _p_a_t_t_e_r_n are replaced with
_s_t_r_i_n_g. If _p_a_t_t_e_r_n is preceded by ## (the third form above), it
must match at the beginning of the expanded value of _p_a_r_a_m_e_t_e_r.
If _p_a_t_t_e_r_n is preceded by %% (the fourth form above), it must
match at the end of the expanded value of _p_a_r_a_m_e_t_e_r.
If the expansion of _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are
deleted and the // following _p_a_t_t_e_r_n may be omitted.
If the ppaattssuubb__rreeppllaacceemmeenntt shell option is enabled using sshhoopptt,
any unquoted instances of && in _s_t_r_i_n_g are replaced with the
matching portion of _p_a_t_t_e_r_n.
Quoting any part of _s_t_r_i_n_g inhibits replacement in the expansion
of the quoted portion, including replacement strings stored in
shell variables. Backslash escapes && in _s_t_r_i_n_g; the backslash
is removed in order to permit a literal && in the replacement
string. Backslash can also be used to escape a backslash; \\\\
results in a literal backslash in the replacement. Users should
take care if _s_t_r_i_n_g is double-quoted to avoid unwanted interac-
tions between the backslash and double-quoting, since backslash
has special meaning within double quotes. Pattern substitution
performs the check for unquoted && after expanding _s_t_r_i_n_g; shell
programmers should quote any occurrences of && they want to be
taken literally in the replacement and ensure any instances of &&
they want to be replaced are unquoted.
Like the pattern removal operators, double quotes surrounding
the replacement string quote the expanded characters, while dou-
ble quotes enclosing the entire parameter substitution do not,
since the expansion is performed in a context that doesn't take
any enclosing double quotes into account.
If the nnooccaasseemmaattcchh shell option is enabled, the match is per-
formed without regard to the case of alphabetic characters.
If _p_a_r_a_m_e_t_e_r is @@ or **, the substitution operation is applied to
each positional parameter in turn, and the expansion is the re-
sultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted
with @@ or **, the substitution operation is applied to each mem-
ber of the array in turn, and the expansion is the resultant
list.
${_p_a_r_a_m_e_t_e_r^^_p_a_t_t_e_r_n}
${_p_a_r_a_m_e_t_e_r^^^^_p_a_t_t_e_r_n}
${_p_a_r_a_m_e_t_e_r,,_p_a_t_t_e_r_n}
${_p_a_r_a_m_e_t_e_r,,,,_p_a_t_t_e_r_n}
CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha-
betic characters in _p_a_r_a_m_e_t_e_r. First, the _p_a_t_t_e_r_n is expanded
to produce a pattern as described below under PPaatttteerrnn MMaattcchhiinngg.
BBaasshh then examines characters in the expanded value of _p_a_r_a_m_e_t_e_r
against _p_a_t_t_e_r_n as described below. If a character matches the
pattern, its case is converted. The pattern should not attempt
to match more than one character.
Using "^" converts lowercase letters matching _p_a_t_t_e_r_n to upper-
case; "," converts matching uppercase letters to lowercase. The
^^ and ,, variants examine the first character in the expanded
value and convert its case if it matches _p_a_t_t_e_r_n; the ^^^^ and ,,,,
variants examine all characters in the expanded value and con-
vert each one that matches _p_a_t_t_e_r_n. If _p_a_t_t_e_r_n is omitted, it
is treated like a ??, which matches every character.
If _p_a_r_a_m_e_t_e_r is @@ or **, the case modification operation is ap-
plied to each positional parameter in turn, and the expansion is
the resultant list. If _p_a_r_a_m_e_t_e_r is an array variable sub-
scripted with @@ or **, the case modification operation is applied
to each member of the array in turn, and the expansion is the
resultant list.
${_p_a_r_a_m_e_t_e_r@@_o_p_e_r_a_t_o_r}
PPaarraammeetteerr ttrraannssffoorrmmaattiioonn. The expansion is either a transforma-
tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r
itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a
single letter:
UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
with lowercase alphabetic characters converted to upper-
case.
uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
with the first character converted to uppercase, if it is
alphabetic.
LL The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
with uppercase alphabetic characters converted to lower-
case.
QQ The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
quoted in a format that can be reused as input.
EE The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
with backslash escape sequences expanded as with the
$$''...'' quoting mechanism.
PP The expansion is a string that is the result of expanding
the value of _p_a_r_a_m_e_t_e_r as if it were a prompt string (see
PPRROOMMPPTTIINNGG below).
AA The expansion is a string in the form of an assignment
statement or ddeeccllaarree command that, if evaluated, recre-
ates _p_a_r_a_m_e_t_e_r with its attributes and value.
KK Produces a possibly-quoted version of the value of _p_a_r_a_-
_m_e_t_e_r, except that it prints the values of indexed and
associative arrays as a sequence of quoted key-value
pairs (see AArrrraayyss above). The keys and values are quoted
in a format that can be reused as input.
aa The expansion is a string consisting of flag values rep-
resenting _p_a_r_a_m_e_t_e_r's attributes.
kk Like the K transformation, but expands the keys and val-
ues of indexed and associative arrays to separate words
after word splitting.
If _p_a_r_a_m_e_t_e_r is @@ or **, the operation is applied to each posi-
tional parameter in turn, and the expansion is the resultant
list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted with @@ or
**, the operation is applied to each member of the array in turn,
and the expansion is the resultant list.
The result of the expansion is subject to word splitting and
pathname expansion as described below.
CCoommmmaanndd SSuubbssttiittuuttiioonn
_C_o_m_m_a_n_d _s_u_b_s_t_i_t_u_t_i_o_n allows the output of a command to replace the com-
mand itself. There are two standard forms:
$$((_c_o_m_m_a_n_d))
or (deprecated)
``_c_o_m_m_a_n_d``.
BBaasshh performs the expansion by executing _c_o_m_m_a_n_d in a subshell environ-
ment and replacing the command substitution with the standard output of
the command, with any trailing newlines deleted. Embedded newlines are
not deleted, but they may be removed during word splitting. The com-
mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but
faster $$((<< _f_i_l_e)).
With the old-style backquote form of substitution, backslash retains
its literal meaning except when followed by $$, ``, or \\. The first
backquote not preceded by a backslash terminates the command substitu-
tion. When using the $(_c_o_m_m_a_n_d) form, all characters between the
parentheses make up the command; none are treated specially.
There is an alternate form of command substitution:
$${{_c _c_o_m_m_a_n_d;;}}
which executes _c_o_m_m_a_n_d in the current execution environment and cap-
tures its output, again with trailing newlines removed.
The character _c following the open brace must be a space, tab, newline,
or ||, and the close brace must be in a position where a reserved word
may appear (i.e., preceded by a command terminator such as semicolon).
BBaasshh allows the close brace to be joined to the remaining characters in
the word without being followed by a shell metacharacter as a reserved
word would usually require.
Any side effects of _c_o_m_m_a_n_d take effect immediately in the current exe-
cution environment and persist in the current environment after the
command completes (e.g., the eexxiitt builtin exits the shell).
This type of command substitution superficially resembles executing an
unnamed shell function: local variables are created as when a shell
function is executing, and the rreettuurrnn builtin forces _c_o_m_m_a_n_d to com-
plete; however, the rest of the execution environment, including the
positional parameters, is shared with the caller.
If the first character following the open brace is a ||, the construct
expands to the value of the RREEPPLLYY shell variable after _c_o_m_m_a_n_d exe-
cutes, without removing any trailing newlines, and the standard output
of _c_o_m_m_a_n_d remains the same as in the calling shell. BBaasshh creates RREE--
PPLLYY as an initially-unset local variable when _c_o_m_m_a_n_d executes, and re-
stores RREEPPLLYY to the value it had before the command substitution after
_c_o_m_m_a_n_d completes, as with any local variable.
Command substitutions may be nested. To nest when using the backquoted
form, escape the inner backquotes with backslashes.
If the substitution appears within double quotes, bbaasshh does not perform
word splitting and pathname expansion on the results.
AArriitthhmmeettiicc EExxppaannssiioonn
Arithmetic expansion evaluates an arithmetic expression and substitutes
the result. The format for arithmetic expansion is:
$$((((_e_x_p_r_e_s_s_i_o_n))))
The _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it were within dou-
ble quotes, but unescaped double quote characters in _e_x_p_r_e_s_s_i_o_n are not
treated specially and are removed. All tokens in the expression un-
dergo parameter and variable expansion, command substitution, and quote
removal. The result is treated as the arithmetic expression to be
evaluated. Since the way Bash handles double quotes can potentially
result in empty strings, arithmetic expansion treats those as expres-
sions that evaluate to 0. Arithmetic expansions may be nested.
The evaluation is performed according to the rules listed below under
AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If _e_x_p_r_e_s_s_i_o_n is invalid, bbaasshh prints a message
to standard error indicating failure, does not perform the substitu-
tion, and does not execute the command associated with the expansion.
PPrroocceessss SSuubbssttiittuuttiioonn
_P_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n allows a process's input or output to be referred
to using a filename. It takes the form of <<((_l_i_s_t)) or >>((_l_i_s_t)). The
process _l_i_s_t is run asynchronously, and its input or output appears as
a filename. This filename is passed as an argument to the current com-
mand as the result of the expansion.
If the >>((_l_i_s_t)) form is used, writing to the file provides input for
_l_i_s_t. If the <<((_l_i_s_t)) form is used, reading the file obtains the output
of _l_i_s_t. No space may appear between the << or >> and the left parenthe-
sis, otherwise the construct would be interpreted as a redirection.
Process substitution is supported on systems that support named pipes
(_F_I_F_O_s) or the _/_d_e_v_/_f_d method of naming open files.
When available, process substitution is performed simultaneously with
parameter and variable expansion, command substitution, and arithmetic
expansion.
WWoorrdd SSpplliittttiinngg
The shell scans the results of parameter expansion, command substitu-
tion, and arithmetic expansion that did not occur within double quotes
for _w_o_r_d _s_p_l_i_t_t_i_n_g. Words that were not expanded are not split.
The shell treats each character of IIFFSS as a delimiter, and splits the
results of the other expansions into words using these characters as
field terminators.
An _I_F_S _w_h_i_t_e_s_p_a_c_e character is whitespace as defined above (see DDeeffiinnii--
ttiioonnss) that appears in the value of IIFFSS. Space, tab, and newline are
always considered IFS whitespace, even if they don't appear in the lo-
cale's ssppaaccee category.
If IIFFSS is unset, field splitting acts as if its value were
<<ssppaaccee>><<ttaabb>><<nneewwlliinnee>>, and treats these characters as IFS whitespace.
If the value of IIFFSS is null, no word splitting occurs, but implicit
null arguments (see below) are still removed.
Word splitting begins by removing sequences of IFS whitespace charac-
ters from the beginning and end of the results of the previous expan-
sions, then splits the remaining words.
If the value of IIFFSS consists solely of IFS whitespace, any sequence of
IFS whitespace characters delimits a field, so a field consists of
characters that are not unquoted IFS whitespace, and null fields result
only from quoting.
If IIFFSS contains a non-whitespace character, then any character in the
value of IIFFSS that is not IFS whitespace, along with any adjacent IFS
whitespace characters, delimits a field. This means that adjacent non-
IFS-whitespace delimiters produce a null field. A sequence of IFS
whitespace characters also delimits a field.
Explicit null arguments ("""" or '''') are retained and passed to commands
as empty strings. Unquoted implicit null arguments, resulting from the
expansion of parameters that have no values, are removed. Expanding a
parameter with no value within double quotes produces a null field,
which is retained and passed to a command as an empty string.
When a quoted null argument appears as part of a word whose expansion
is non-null, word splitting removes the null argument portion, leaving
the non-null expansion. That is, the word "-d''" becomes "-d" after
word splitting and null argument removal.
PPaatthhnnaammee EExxppaannssiioonn
After word splitting, unless the --ff option has been set, bbaasshh scans
each word for the characters **, ??, and [[. If one of these characters
appears, and is not quoted, then the word is regarded as a _p_a_t_t_e_r_n, and
replaced with a sorted list of filenames matching the pattern (see PPaatt--
tteerrnn MMaattcchhiinngg below) subject to the value of the GGLLOOBBSSOORRTT shell vari-
able.
If no matching filenames are found, and the shell option nnuullllgglloobb is
not enabled, the word is left unchanged. If the nnuullllgglloobb option is
set, and no matches are found, the word is removed. If the ffaaiillgglloobb
shell option is set, and no matches are found, bbaasshh prints an error
message and does not execute the command. If the shell option nnooccaassee--
gglloobb is enabled, the match is performed without regard to the case of
alphabetic characters.
When a pattern is used for pathname expansion, the character "." at the
start of a name or immediately following a slash must be matched ex-
plicitly, unless the shell option ddoottgglloobb is set. In order to match
the filenames _. and _._., the pattern must begin with "." (for example,
".?"), even if ddoottgglloobb is set. If the gglloobbsskkiippddoottss shell option is en-
abled, the filenames _. and _._. never match, even if the pattern begins
with a ".". When not matching pathnames, the "." character is not
treated specially.
When matching a pathname, the slash character must always be matched
explicitly by a slash in the pattern, but in other matching contexts it
can be matched by a special pattern character as described below under
PPaatttteerrnn MMaattcchhiinngg.
See the description of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS for a
description of the nnooccaasseegglloobb, nnuullllgglloobb, gglloobbsskkiippddoottss, ffaaiillgglloobb, and
ddoottgglloobb shell options.
The GGLLOOBBIIGGNNOORREE shell variable may be used to restrict the set of file
names matching a _p_a_t_t_e_r_n. If GGLLOOBBIIGGNNOORREE is set, each matching file
name that also matches one of the patterns in GGLLOOBBIIGGNNOORREE is removed
from the list of matches. If the nnooccaasseegglloobb option is set, the match-
ing against the patterns in GGLLOOBBIIGGNNOORREE is performed without regard to
case. The filenames _. and _._. are always ignored when GGLLOOBBIIGGNNOORREE is set
and not null. However, setting GGLLOOBBIIGGNNOORREE to a non-null value has the
effect of enabling the ddoottgglloobb shell option, so all other filenames be-
ginning with a "." match. To get the old behavior of ignoring file-
names beginning with a ".", make ".*" one of the patterns in GGLLOOBBIIGG--
NNOORREE. The ddoottgglloobb option is disabled when GGLLOOBBIIGGNNOORREE is unset. The
GGLLOOBBIIGGNNOORREE pattern matching honors the setting of the eexxttgglloobb shell op-
tion.
The value of the GGLLOOBBSSOORRTT shell variable controls how the results of
pathname expansion are sorted, as described above under SShheellll VVaarrii--
aabblleess.
PPaatttteerrnn MMaattcchhiinngg
Any character that appears in a pattern, other than the special pattern
characters described below, matches itself. The NUL character may not
occur in a pattern. A backslash escapes the following character; the
escaping backslash is discarded when matching. The special pattern
characters must be quoted if they are to be matched literally.
The special pattern characters have the following meanings:
** Matches any string, including the null string. When the
gglloobbssttaarr shell option is enabled, and ** is used in a
pathname expansion context, two adjacent **s used as a
single pattern match all files and zero or more directo-
ries and subdirectories. If followed by a //, two adja-
cent **s match only directories and subdirectories.
?? Matches any single character.
[[...]] Matches any one of the characters enclosed between the
brackets. This is known as a _b_r_a_c_k_e_t _e_x_p_r_e_s_s_i_o_n and
matches a single character. A pair of characters sepa-
rated by a hyphen denotes a _r_a_n_g_e _e_x_p_r_e_s_s_i_o_n; any charac-
ter that falls between those two characters, inclusive,
using the current locale's collating sequence and charac-
ter set, matches. If the first character following the [[
is a !! or a ^^ then any character not within the range
matches. To match a --, include it as the first or last
character in the set. To match a ]], include it as the
first character in the set.
The sorting order of characters in range expressions, and
the characters included in the range, are determined by
the current locale and the values of the LLCC__CCOOLLLLAATTEE or
LLCC__AALLLL shell variables, if set. To obtain the tradi-
tional interpretation of range expressions, where [[aa--dd]]
is equivalent to [[aabbccdd]], set the value of the LLCC__CCOOLLLLAATTEE
or LLCC__AALLLL shell variables to CC, or enable the gglloobbaassccii--
iirraannggeess shell option.
Within a bracket expression, _c_h_a_r_a_c_t_e_r _c_l_a_s_s_e_s can be
specified using the syntax [[::_c_l_a_s_s::]], where _c_l_a_s_s is one
of the following classes defined in the POSIX standard:
aallnnuumm aallpphhaa aasscciiii bbllaannkk ccnnttrrll ddiiggiitt ggrraapphh lloowweerr pprriinntt
ppuunncctt ssppaaccee uuppppeerr wwoorrdd xxddiiggiitt
A character class matches any character belonging to that
class. The wwoorrdd character class matches letters, digits,
and the character _.
Within a bracket expression, an _e_q_u_i_v_a_l_e_n_c_e _c_l_a_s_s can be
specified using the syntax [[==_c==]], which matches all char-
acters with the same collation weight (as defined by the
current locale) as the character _c.
Within a bracket expression, the syntax [[.._s_y_m_b_o_l..]]
matches the collating symbol _s_y_m_b_o_l.
If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, the
shell recognizes several extended pattern matching operators. In the
following description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns
separated by a ||. Composite patterns may be formed using one or more
of the following sub-patterns:
??((_p_a_t_t_e_r_n_-_l_i_s_t))
Matches zero or one occurrence of the given patterns.
**((_p_a_t_t_e_r_n_-_l_i_s_t))
Matches zero or more occurrences of the given patterns.
++((_p_a_t_t_e_r_n_-_l_i_s_t))
Matches one or more occurrences of the given patterns.
@@((_p_a_t_t_e_r_n_-_l_i_s_t))
Matches one of the given patterns.
!!((_p_a_t_t_e_r_n_-_l_i_s_t))
Matches anything except one of the given patterns.
The eexxttgglloobb option changes the behavior of the parser, since the paren-
theses are normally treated as operators with syntactic meaning. To
ensure that extended matching patterns are parsed correctly, make sure
that eexxttgglloobb is enabled before parsing constructs containing the pat-
terns, including shell functions and command substitutions.
When matching filenames, the ddoottgglloobb shell option determines the set of
filenames that are tested: when ddoottgglloobb is enabled, the set of file-
names includes all files beginning with ".", but _. and _._. must be
matched by a pattern or sub-pattern that begins with a dot; when it is
disabled, the set does not include any filenames beginning with "." un-
less the pattern or sub-pattern begins with a ".". If the gglloobbsskkiippddoottss
shell option is enabled, the filenames _. and _._. never appear in the
set. As above, "." only has a special meaning when matching filenames.
Complicated extended pattern matching against long strings is slow, es-
pecially when the patterns contain alternations and the strings contain
multiple matches. Using separate matches against shorter strings, or
using arrays of strings instead of a single long string, may be faster.
QQuuoottee RReemmoovvaall
After the preceding expansions, all unquoted occurrences of the charac-
ters \\, '', and "" that did not result from one of the above expansions
are removed.
RREEDDIIRREECCTTIIOONN
Before a command is executed, its input and output may be _r_e_d_i_r_e_c_t_e_d
using a special notation interpreted by the shell. _R_e_d_i_r_e_c_t_i_o_n allows
commands' file handles to be duplicated, opened, closed, made to refer
to different files, and can change the files the command reads from and
writes to. When used with the eexxeecc builtin, redirections modify file
handles in the current shell execution environment. The following
redirection operators may precede or appear anywhere within a _s_i_m_p_l_e
_c_o_m_m_a_n_d or may follow a _c_o_m_m_a_n_d. Redirections are processed in the or-
der they appear, from left to right.
Each redirection that may be preceded by a file descriptor number may
instead be preceded by a word of the form {_v_a_r_n_a_m_e}. In this case, for
each redirection operator except >>&&-- and <<&&--, the shell allocates a
file descriptor greater than or equal to 10 and assigns it to _v_a_r_n_a_m_e.
If {_v_a_r_n_a_m_e} precedes >>&&-- or <<&&--, the value of _v_a_r_n_a_m_e defines the file
descriptor to close. If {_v_a_r_n_a_m_e} is supplied, the redirection per-
sists beyond the scope of the command, which allows the shell program-
mer to manage the file descriptor's lifetime manually without using the
eexxeecc builtin. The vvaarrrreeddiirr__cclloossee shell option manages this behavior.
In the following descriptions, if the file descriptor number is omit-
ted, and the first character of the redirection operator is "<", the
redirection refers to the standard input (file descriptor 0). If the
first character of the redirection operator is ">", the redirection
refers to the standard output (file descriptor 1).
The _w_o_r_d following the redirection operator in the following descrip-
tions, unless otherwise noted, is subjected to brace expansion, tilde
expansion, parameter and variable expansion, command substitution,
arithmetic expansion, quote removal, pathname expansion, and word
splitting. If it expands to more than one word, bbaasshh reports an error.
The order of redirections is significant. For example, the command
ls >> dirlist 2>>&&1
directs both standard output and standard error to the file _d_i_r_l_i_s_t,
while the command
ls 2>>&&1 >> dirlist
directs only the standard output to file _d_i_r_l_i_s_t, because the standard
error was directed to the standard output before the standard output
was redirected to _d_i_r_l_i_s_t.
BBaasshh handles several filenames specially when they are used in redirec-
tions, as described in the following table. If the operating system on
which bbaasshh is running provides these special files, bbaasshh uses them;
otherwise it emulates them internally with the behavior described be-
low.
//ddeevv//ffdd//_f_d
If _f_d is a valid integer, duplicate file descriptor _f_d.
//ddeevv//ssttddiinn
File descriptor 0 is duplicated.
//ddeevv//ssttddoouutt
File descriptor 1 is duplicated.
//ddeevv//ssttddeerrrr
File descriptor 2 is duplicated.
//ddeevv//ttccpp//_h_o_s_t//_p_o_r_t
If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t
is an integer port number or service name, bbaasshh attempts
to open the corresponding TCP socket.
//ddeevv//uuddpp//_h_o_s_t//_p_o_r_t
If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t
is an integer port number or service name, bbaasshh attempts
to open the corresponding UDP socket.
A failure to open or create a file causes the redirection to fail.
Redirections using file descriptors greater than 9 should be used with
care, as they may conflict with file descriptors the shell uses inter-
nally.
RReeddiirreeccttiinngg IInnppuutt
Redirecting input opens the file whose name results from the expansion
of _w_o_r_d for reading on file descriptor _n, or the standard input (file
descriptor 0) if _n is not specified.
The general format for redirecting input is:
[_n]<<_w_o_r_d
RReeddiirreeccttiinngg OOuuttppuutt
Redirecting output opens the file whose name results from the expansion
of _w_o_r_d for writing on file descriptor _n, or the standard output (file
descriptor 1) if _n is not specified. If the file does not exist it is
created; if it does exist it is truncated to zero size.
The general format for redirecting output is:
[_n]>>_w_o_r_d
If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett
builtin command has been enabled, the redirection fails if the file
whose name results from the expansion of _w_o_r_d exists and is a regular
file. If the redirection operator is >>||, or the redirection operator
is >> and the nnoocclloobbbbeerr option to the sseett builtin is not enabled, bbaasshh
attempts the redirection even if the file named by _w_o_r_d exists.
AAppppeennddiinngg RReeddiirreecctteedd OOuuttppuutt
Redirecting output in this fashion opens the file whose name results
from the expansion of _w_o_r_d for appending on file descriptor _n, or the
standard output (file descriptor 1) if _n is not specified. If the file
does not exist it is created.
The general format for appending output is:
[_n]>>>>_w_o_r_d
RReeddiirreeccttiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr
This construct redirects both the standard output (file descriptor 1)
and the standard error output (file descriptor 2) to the file whose
name is the expansion of _w_o_r_d.
There are two formats for redirecting standard output and standard er-
ror:
&&>>_w_o_r_d
and
>>&&_w_o_r_d
Of the two forms, the first is preferred. This is semantically equiva-
lent to
>>_w_o_r_d 2>>&&1
When using the second form, _w_o_r_d may not expand to a number or --. If
it does, other redirection operators apply (see DDuupplliiccaattiinngg FFiillee DDee--
ssccrriippttoorrss below) for compatibility reasons.
AAppppeennddiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr
This construct appends both the standard output (file descriptor 1) and
the standard error output (file descriptor 2) to the file whose name is
the expansion of _w_o_r_d.
The format for appending standard output and standard error is:
&&>>>>_w_o_r_d
This is semantically equivalent to
>>>>_w_o_r_d 2>>&&1
(see DDuupplliiccaattiinngg FFiillee DDeessccrriippttoorrss below).
HHeerree DDooccuummeennttss
This type of redirection instructs the shell to read input from the
current source until it reads a line containing only _d_e_l_i_m_i_t_e_r (with no
trailing blanks). All of the lines read up to that point then become
the standard input (or file descriptor _n if _n is specified) for a com-
mand.
The format of here-documents is:
[_n]<<<<[--]_w_o_r_d
_h_e_r_e_-_d_o_c_u_m_e_n_t
_d_e_l_i_m_i_t_e_r
The shell does not perform parameter and variable expansion, command
substitution, arithmetic expansion, or pathname expansion on _w_o_r_d.
If any part of _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote re-
moval on _w_o_r_d, and the lines in the here-document are not expanded. If
_w_o_r_d is unquoted, the _d_e_l_i_m_i_t_e_r is _w_o_r_d itself, and the here-document
text is treated similarly to a double-quoted string: all lines of the
here-document are subjected to parameter expansion, command substitu-
tion, and arithmetic expansion, the character sequence \\<<nneewwlliinnee>> is
treated literally, and \\ must be used to quote the characters \\, $$, and
``; however, double quote characters have no special meaning.
If the redirection operator is <<<<--, then the shell strips all leading
tab characters from input lines and the line containing _d_e_l_i_m_i_t_e_r.
This allows here-documents within shell scripts to be indented in a
natural fashion.
If the delimiter is not quoted, the \\<<nneewwlliinnee>> sequence is treated as a
line continuation: the two lines are joined and the backslash-newline
is removed. This happens while reading the here-document, before the
check for the ending delimiter, so joined lines can form the end delim-
iter.
HHeerree SSttrriinnggss
A variant of here documents, the format is:
[_n]<<<<<<_w_o_r_d
The _w_o_r_d undergoes tilde expansion, parameter and variable expansion,
command substitution, arithmetic expansion, and quote removal. Path-
name expansion and word splitting are not performed. The result is
supplied as a single string, with a newline appended, to the command on
its standard input (or file descriptor _n if _n is specified).
DDuupplliiccaattiinngg FFiillee DDeessccrriippttoorrss
The redirection operator
[_n]<<&&_w_o_r_d
is used to duplicate input file descriptors. If _w_o_r_d expands to one or
more digits, file descriptor _n is made to be a copy of that file de-
scriptor. It is a redirection error if the digits in _w_o_r_d do not spec-
ify a file descriptor open for input. If _w_o_r_d evaluates to --, file de-
scriptor _n is closed. If _n is not specified, this uses the standard
input (file descriptor 0).
The operator
[_n]>>&&_w_o_r_d
is used similarly to duplicate output file descriptors. If _n is not
specified, this uses the standard output (file descriptor 1). It is a
redirection error if the digits in _w_o_r_d do not specify a file descrip-
tor open for output. If _w_o_r_d evaluates to --, file descriptor _n is
closed. As a special case, if _n is omitted, and _w_o_r_d does not expand
to one or more digits or --, this redirects the standard output and
standard error as described previously.
MMoovviinngg FFiillee DDeessccrriippttoorrss
The redirection operator
[_n]<<&&_d_i_g_i_t--
moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard
input (file descriptor 0) if _n is not specified. _d_i_g_i_t is closed after
being duplicated to _n.
Similarly, the redirection operator
[_n]>>&&_d_i_g_i_t--
moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard
output (file descriptor 1) if _n is not specified.
OOppeenniinngg FFiillee DDeessccrriippttoorrss ffoorr RReeaaddiinngg aanndd WWrriittiinngg
The redirection operator
[_n]<<>>_w_o_r_d
opens the file whose name is the expansion of _w_o_r_d for both reading and
writing on file descriptor _n, or on file descriptor 0 if _n is not spec-
ified. If the file does not exist, it is created.
AALLIIAASSEESS
_A_l_i_a_s_e_s allow a string to be substituted for a word that is in a posi-
tion in the input where it can be the first word of a simple command.
Aliases have names and corresponding values that are set and unset us-
ing the aalliiaass and uunnaalliiaass builtin commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
below).
If the shell reads an unquoted word in the right position, it checks
the word to see if it matches an alias name. If it matches, the shell
replaces the word with the alias value, and reads that value as if it
had been read instead of the word. The shell doesn't look at any char-
acters following the word before attempting alias substitution.
The characters //, $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or
quoting characters listed above may not appear in an alias name. The
replacement text may contain any valid shell input, including shell
metacharacters. The first word of the replacement text is tested for
aliases, but a word that is identical to an alias being expanded is not
expanded a second time. This means that one may alias llss to llss --FF, for
instance, and bbaasshh does not try to recursively expand the replacement
text.
If the last character of the alias value is a _b_l_a_n_k, the shell checks
the next command word following the alias for alias expansion.
Aliases are created and listed with the aalliiaass command, and removed with
the uunnaalliiaass command.
There is no mechanism for using arguments in the replacement text. If
arguments are needed, use a shell function (see FFUUNNCCTTIIOONNSS below) in-
stead.
Aliases are not expanded when the shell is not interactive, unless the
eexxppaanndd__aalliiaasseess shell option is set using sshhoopptt (see the description of
sshhoopptt under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
The rules concerning the definition and use of aliases are somewhat
confusing. BBaasshh always reads at least one complete line of input, and
all lines that make up a compound command, before executing any of the
commands on that line or the compound command. Aliases are expanded
when a command is read, not when it is executed. Therefore, an alias
definition appearing on the same line as another command does not take
effect until the shell reads the next line of input, and an alias defi-
nition in a compound command does not take effect until the shell
parses and executes the entire compound command. The commands follow-
ing the alias definition on that line, or in the rest of a compound
command, are not affected by the new alias. This behavior is also an
issue when functions are executed. Aliases are expanded when a func-
tion definition is read, not when the function is executed, because a
function definition is itself a command. As a consequence, aliases de-
fined in a function are not available until after that function is exe-
cuted. To be safe, always put alias definitions on a separate line,
and do not use aalliiaass in compound commands.
For almost every purpose, shell functions are preferable to aliases.
FFUUNNCCTTIIOONNSS
A shell function, defined as described above under SSHHEELLLL GGRRAAMMMMAARR,
stores a series of commands for later execution. When the name of a
shell function is used as a simple command name, the shell executes the
list of commands associated with that function name. Functions are ex-
ecuted in the context of the calling shell; there is no new process
created to interpret them (contrast this with the execution of a shell
script).
When a function is executed, the arguments to the function become the
positional parameters during its execution. The special parameter ## is
updated to reflect the new positional parameters. Special parameter 00
is unchanged. The first element of the FFUUNNCCNNAAMMEE variable is set to the
name of the function while the function is executing.
All other aspects of the shell execution environment are identical be-
tween a function and its caller with these exceptions: the DDEEBBUUGG and
RREETTUURRNN traps (see the description of the ttrraapp builtin under SSHHEELLLL
BBUUIILLTTIINN CCOOMMMMAANNDDSS below) are not inherited unless the function has been
given the ttrraaccee attribute (see the description of the ddeeccllaarree builtin
below) or the --oo ffuunnccttrraaccee shell option has been enabled with the sseett
builtin (in which case all functions inherit the DDEEBBUUGG and RREETTUURRNN
traps), and the EERRRR trap is not inherited unless the --oo eerrrrttrraaccee shell
option has been enabled.
Variables local to the function are declared with the llooccaall builtin
command (_l_o_c_a_l _v_a_r_i_a_b_l_e_s). Ordinarily, variables and their values are
shared between the function and its caller. If a variable is declared
llooccaall, the variable's visible scope is restricted to that function and
its children (including the functions it calls).
In the following description, the _c_u_r_r_e_n_t _s_c_o_p_e is a currently- execut-
ing function. Previous scopes consist of that function's caller and so
on, back to the "global" scope, where the shell is not executing any
shell function. A local variable at the current scope is a variable
declared using the llooccaall or ddeeccllaarree builtins in the function that is
currently executing.
Local variables "shadow" variables with the same name declared at pre-
vious scopes. For instance, a local variable declared in a function
hides variables with the same name declared at previous scopes, includ-
ing global variables: references and assignments refer to the local
variable, leaving the variables at previous scopes unmodified. When
the function returns, the global variable is once again visible.
The shell uses _d_y_n_a_m_i_c _s_c_o_p_i_n_g to control a variable's visibility
within functions. With dynamic scoping, visible variables and their
values are a result of the sequence of function calls that caused exe-
cution to reach the current function. The value of a variable that a
function sees depends on its value within its caller, if any, whether
that caller is the global scope or another shell function. This is
also the value that a local variable declaration shadows, and the value
that is restored when the function returns.
For example, if a variable _v_a_r is declared as local in function _f_u_n_c_1,
and _f_u_n_c_1 calls another function _f_u_n_c_2, references to _v_a_r made from
within _f_u_n_c_2 resolve to the local variable _v_a_r from _f_u_n_c_1, shadowing
any global variable named _v_a_r.
The uunnsseett builtin also acts using the same dynamic scope: if a variable
is local to the current scope, uunnsseett unsets it; otherwise the unset
will refer to the variable found in any calling scope as described
above. If a variable at the current local scope is unset, it remains
so (appearing as unset) until it is reset in that scope or until the
function returns. Once the function returns, any instance of the vari-
able at a previous scope becomes visible. If the unset acts on a vari-
able at a previous scope, any instance of a variable with that name
that had been shadowed becomes visible (see below how the llooccaallvvaarr__uunn--
sseett shell option changes this behavior).
The FFUUNNCCNNEESSTT variable, if set to a numeric value greater than 0, de-
fines a maximum function nesting level. Function invocations that ex-
ceed the limit cause the entire command to abort.
If the builtin command rreettuurrnn is executed in a function, the function
completes and execution resumes with the next command after the func-
tion call. If rreettuurrnn is supplied a numeric argument, that is the func-
tion's return status; otherwise the function's return status is the
exit status of the last command executed before the rreettuurrnn. Any com-
mand associated with the RREETTUURRNN trap is executed before execution re-
sumes. When a function completes, the values of the positional parame-
ters and the special parameter ## are restored to the values they had
prior to the function's execution.
The --ff option to the ddeeccllaarree or ttyyppeesseett builtin commands lists function
names and definitions. The --FF option to ddeeccllaarree or ttyyppeesseett lists the
function names only (and optionally the source file and line number, if
the eexxttddeebbuugg shell option is enabled). Functions may be exported so
that child shell processes (those created when executing a separate
shell invocation) automatically have them defined with the --ff option to
the eexxppoorrtt builtin. The --ff option to the uunnsseett builtin deletes a func-
tion definition.
Functions may be recursive. The FFUUNNCCNNEESSTT variable may be used to limit
the depth of the function call stack and restrict the number of func-
tion invocations. By default, bbaasshh imposes no limit on the number of
recursive calls.
AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN
The shell allows arithmetic expressions to be evaluated, under certain
circumstances (see the lleett and ddeeccllaarree builtin commands, the (((( com-
pound command, the arithmetic ffoorr command, the [[[[ conditional command,
and AArriitthhmmeettiicc EExxppaannssiioonn).
Evaluation is done in the largest fixed-width integers available, with
no check for overflow, though division by 0 is trapped and flagged as
an error. The operators and their precedence, associativity, and val-
ues are the same as in the C language. The following list of operators
is grouped into levels of equal-precedence operators. The levels are
listed in order of decreasing precedence.
_i_d++++ _i_d----
variable post-increment and post-decrement
++++_i_d ----_i_d
variable pre-increment and pre-decrement
-- ++ unary minus and plus
!! ~~ logical and bitwise negation
**** exponentiation
** // %% multiplication, division, remainder
++ -- addition, subtraction
<<<< >>>> left and right bitwise shifts
<<== >>== << >>
comparison
==== !!== equality and inequality
&& bitwise AND
^^ bitwise exclusive OR
|| bitwise OR
&&&& logical AND
|||| logical OR
_e_x_p_r??_e_x_p_r::_e_x_p_r
conditional operator
== **== //== %%== ++== --== <<<<== >>>>== &&== ^^== ||==
assignment
_e_x_p_r_1 ,, _e_x_p_r_2
comma
Shell variables are allowed as operands; parameter expansion is per-
formed before the expression is evaluated. Within an expression, shell
variables may also be referenced by name without using the parameter
expansion syntax. This means you can use "x", where _x is a shell vari-
able name, in an arithmetic expression, and the shell will evaluate its
value as an expression and use the result. A shell variable that is
null or unset evaluates to 0 when referenced by name in an expression.
The value of a variable is evaluated as an arithmetic expression when
it is referenced, or when a variable which has been given the _i_n_t_e_g_e_r
attribute using ddeeccllaarree --ii is assigned a value. A null value evaluates
to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on
to be used in an expression.
Integer constants follow the C language definition, without suffixes or
character constants. Constants with a leading 0 are interpreted as oc-
tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num-
bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num-
ber between 2 and 64 representing the arithmetic base, and _n is a num-
ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When
specifying _n, if a non-digit is required, the digits greater than 9 are
represented by the lowercase letters, the uppercase letters, @, and _,
in that order. If _b_a_s_e is less than or equal to 36, lowercase and up-
percase letters may be used interchangeably to represent numbers be-
tween 10 and 35.
Operators are evaluated in precedence order. Sub-expressions in paren-
theses are evaluated first and may override the precedence rules above.
CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS
Conditional expressions are used by the [[[[ compound command and the
tteesstt and [[ builtin commands to test file attributes and perform string
and arithmetic comparisons. The tteesstt and [[ commands determine their
behavior based on the number of arguments; see the descriptions of
those commands for any other command-specific actions.
Expressions are formed from the unary or binary primaries listed below.
Unary expressions are often used to examine the status of a file or
shell variable. Binary operators are used for string, numeric, and
file attribute comparisons.
BBaasshh handles several filenames specially when they are used in expres-
sions. If the operating system on which bbaasshh is running provides these
special files, bash will use them; otherwise it will emulate them in-
ternally with this behavior: If any _f_i_l_e argument to one of the pri-
maries is of the form _/_d_e_v_/_f_d_/_n, then bbaasshh checks file descriptor _n.
If the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n,
_/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, bbaasshh checks file descriptor 0, 1, or 2,
respectively.
Unless otherwise specified, primaries that operate on files follow sym-
bolic links and operate on the target of the link, rather than the link
itself.
When used with [[[[, or when the shell is in posix mode, the << and >> op-
erators sort lexicographically using the current locale. When the
shell is not in posix mode, the tteesstt command sorts using ASCII order-
ing.
--aa _f_i_l_e
True if _f_i_l_e exists.
--bb _f_i_l_e
True if _f_i_l_e exists and is a block special file.
--cc _f_i_l_e
True if _f_i_l_e exists and is a character special file.
--dd _f_i_l_e
True if _f_i_l_e exists and is a directory.
--ee _f_i_l_e
True if _f_i_l_e exists.
--ff _f_i_l_e
True if _f_i_l_e exists and is a regular file.
--gg _f_i_l_e
True if _f_i_l_e exists and is set-group-id.
--hh _f_i_l_e
True if _f_i_l_e exists and is a symbolic link.
--kk _f_i_l_e
True if _f_i_l_e exists and its "sticky" bit is set.
--pp _f_i_l_e
True if _f_i_l_e exists and is a named pipe (FIFO).
--rr _f_i_l_e
True if _f_i_l_e exists and is readable.
--ss _f_i_l_e
True if _f_i_l_e exists and has a size greater than zero.
--tt _f_d True if file descriptor _f_d is open and refers to a terminal.
--uu _f_i_l_e
True if _f_i_l_e exists and its set-user-id bit is set.
--ww _f_i_l_e
True if _f_i_l_e exists and is writable.
--xx _f_i_l_e
True if _f_i_l_e exists and is executable.
--GG _f_i_l_e
True if _f_i_l_e exists and is owned by the effective group id.
--LL _f_i_l_e
True if _f_i_l_e exists and is a symbolic link.
--NN _f_i_l_e
True if _f_i_l_e exists and has been modified since it was last ac-
cessed.
--OO _f_i_l_e
True if _f_i_l_e exists and is owned by the effective user id.
--SS _f_i_l_e
True if _f_i_l_e exists and is a socket.
--oo _o_p_t_n_a_m_e
True if the shell option _o_p_t_n_a_m_e is enabled. See the list of
options under the description of the --oo option to the sseett
builtin below.
--vv _v_a_r_n_a_m_e
True if the shell variable _v_a_r_n_a_m_e is set (has been assigned a
value). If _v_a_r_n_a_m_e is an indexed array variable name sub-
scripted by _@ or _*, this returns true if the array has any set
elements. If _v_a_r_n_a_m_e is an associative array variable name sub-
scripted by _@ or _*, this returns true if an element with that
key is set.
--RR _v_a_r_n_a_m_e
True if the shell variable _v_a_r_n_a_m_e is set and is a name refer-
ence.
--zz _s_t_r_i_n_g
True if the length of _s_t_r_i_n_g is zero.
_s_t_r_i_n_g
--nn _s_t_r_i_n_g
True if the length of _s_t_r_i_n_g is non-zero.
_s_t_r_i_n_g_1 ==== _s_t_r_i_n_g_2
_s_t_r_i_n_g_1 == _s_t_r_i_n_g_2
True if the strings are equal. == should be used with the tteesstt
command for POSIX conformance. When used with the [[[[ command,
this performs pattern matching as described above (CCoommppoouunndd CCoomm--
mmaannddss).
_s_t_r_i_n_g_1 !!== _s_t_r_i_n_g_2
True if the strings are not equal.
_s_t_r_i_n_g_1 << _s_t_r_i_n_g_2
True if _s_t_r_i_n_g_1 sorts before _s_t_r_i_n_g_2 lexicographically.
_s_t_r_i_n_g_1 >> _s_t_r_i_n_g_2
True if _s_t_r_i_n_g_1 sorts after _s_t_r_i_n_g_2 lexicographically.
_f_i_l_e_1 --eeff _f_i_l_e_2
True if _f_i_l_e_1 and _f_i_l_e_2 refer to the same device and inode num-
bers.
_f_i_l_e_1 -nntt _f_i_l_e_2
True if _f_i_l_e_1 is newer (according to modification date) than
_f_i_l_e_2, or if _f_i_l_e_1 exists and _f_i_l_e_2 does not.
_f_i_l_e_1 -oott _f_i_l_e_2
True if _f_i_l_e_1 is older than _f_i_l_e_2, or if _f_i_l_e_2 exists and _f_i_l_e_1
does not.
_a_r_g_1 OOPP _a_r_g_2
OOPP is one of --eeqq, --nnee, --lltt, --llee, --ggtt, or --ggee. These arithmetic
binary operators return true if _a_r_g_1 is equal to, not equal to,
less than, less than or equal to, greater than, or greater than
or equal to _a_r_g_2, respectively. _a_r_g_1 and _a_r_g_2 may be positive
or negative integers. When used with the [[[[ command, _a_r_g_1 and
_a_r_g_2 are evaluated as arithmetic expressions (see AARRIITTHHMMEETTIICC
EEVVAALLUUAATTIIOONN above). Since the expansions the [[[[ command performs
on _a_r_g_1 and _a_r_g_2 can potentially result in empty strings, arith-
metic expression evaluation treats those as expressions that
evaluate to 0.
SSIIMMPPLLEE CCOOMMMMAANNDD EEXXPPAANNSSIIOONN
When the shell executes a simple command, it performs the following ex-
pansions, assignments, and redirections, from left to right, in the
following order.
1. The words that the parser has marked as variable assignments
(those preceding the command name) and redirections are saved
for later processing.
2. The words that are not variable assignments or redirections are
expanded. If any words remain after expansion, the first word
is taken to be the name of the command and the remaining words
are the arguments.
3. Redirections are performed as described above under RREEDDIIRREECCTTIIOONN.
4. The text after the == in each variable assignment undergoes tilde
expansion, parameter expansion, command substitution, arithmetic
expansion, and quote removal before being assigned to the vari-
able.
If no command name results, the variable assignments affect the current
shell environment. In the case of such a command (one that consists
only of assignment statements and redirections), assignment statements
are performed before redirections. Otherwise, the variables are added
to the environment of the executed command and do not affect the cur-
rent shell environment. If any of the assignments attempts to assign a
value to a readonly variable, an error occurs, and the command exits
with a non-zero status.
If no command name results, redirections are performed, but do not af-
fect the current shell environment. A redirection error causes the
command to exit with a non-zero status.
If there is a command name left after expansion, execution proceeds as
described below. Otherwise, the command exits. If one of the expan-
sions contained a command substitution, the exit status of the command
is the exit status of the last command substitution performed. If
there were no command substitutions, the command exits with a zero sta-
tus.
CCOOMMMMAANNDD EEXXEECCUUTTIIOONN
After a command has been split into words, if it results in a simple
command and an optional list of arguments, the shell performs the fol-
lowing actions.
If the command name contains no slashes, the shell attempts to locate
it. If there exists a shell function by that name, that function is
invoked as described above in FFUUNNCCTTIIOONNSS. If the name does not match a
function, the shell searches for it in the list of shell builtins. If
a match is found, that builtin is invoked.
If the name is neither a shell function nor a builtin, and contains no
slashes, bbaasshh searches each element of the PPAATTHH for a directory con-
taining an executable file by that name. BBaasshh uses a hash table to re-
member the full pathnames of executable files (see hhaasshh under SSHHEELLLL
BBUUIILLTTIINN CCOOMMMMAANNDDSS below). Bash performs a full search of the directo-
ries in PPAATTHH only if the command is not found in the hash table. If
the search is unsuccessful, the shell searches for a defined shell
function named ccoommmmaanndd__nnoott__ffoouunndd__hhaannddllee. If that function exists, it
is invoked in a separate execution environment with the original com-
mand and the original command's arguments as its arguments, and the
function's exit status becomes the exit status of that subshell. If
that function is not defined, the shell prints an error message and re-
turns an exit status of 127.
If the search is successful, or if the command name contains one or
more slashes, the shell executes the named program in a separate execu-
tion environment. Argument 0 is set to the name given, and the remain-
ing arguments to the command are set to the arguments given, if any.
If this execution fails because the file is not in executable format,
and the file is not a directory, it is assumed to be a _s_h_e_l_l _s_c_r_i_p_t, a
file containing shell commands, and the shell creates a new instance of
itself to execute it. Bash tries to determine whether the file is a
text file or a binary, and will not execute files it determines to be
binaries. This subshell reinitializes itself, so that the effect is as
if a new shell had been invoked to handle the script, with the excep-
tion that the locations of commands remembered by the parent (see hhaasshh
below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS are retained by the child.
If the program is a file beginning with ##!!, the remainder of the first
line specifies an interpreter for the program. The shell executes the
specified interpreter on operating systems that do not handle this exe-
cutable format themselves. The arguments to the interpreter consist of
a single optional argument following the interpreter name on the first
line of the program, followed by the name of the program, followed by
the command arguments, if any.
CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT
The shell has an _e_x_e_c_u_t_i_o_n _e_n_v_i_r_o_n_m_e_n_t, which consists of the follow-
ing:
+o Open files inherited by the shell at invocation, as modified by
redirections supplied to the eexxeecc builtin.
+o The current working directory as set by ccdd, ppuusshhdd, or ppooppdd, or
inherited by the shell at invocation.
+o The file creation mode mask as set by uummaasskk or inherited from
the shell's parent.
+o Current traps set by ttrraapp.
+o Shell parameters that are set by variable assignment or with sseett
or inherited from the shell's parent in the environment.
+o Shell functions defined during execution or inherited from the
shell's parent in the environment.
+o Options enabled at invocation (either by default or with com-
mand-line arguments) or by sseett.
+o Options enabled by sshhoopptt.
+o Shell aliases defined with aalliiaass.
+o Various process IDs, including those of background jobs, the
value of $$$$, and the value of PPPPIIDD.
When a simple command other than a builtin or shell function is to be
executed, it is invoked in a separate execution environment that con-
sists of the following. Unless otherwise noted, the values are inher-
ited from the shell.
+o The shell's open files, plus any modifications and additions
specified by redirections to the command.
+o The current working directory.
+o The file creation mode mask.
+o Shell variables and functions marked for export, along with
variables exported for the command, passed in the environment.
+o Traps caught by the shell are reset to the values inherited from
the shell's parent, and traps ignored by the shell are ignored.
A command invoked in this separate environment cannot affect the
shell's execution environment.
A _s_u_b_s_h_e_l_l is a copy of the shell process.
Command substitution, commands grouped with parentheses, and asynchro-
nous commands are invoked in a subshell environment that is a duplicate
of the shell environment, except that traps caught by the shell are re-
set to the values that the shell inherited from its parent at invoca-
tion. Builtin commands that are invoked as part of a pipeline, except
possibly in the last element depending on the value of the llaassttppiippee
shell option, are also executed in a subshell environment. Changes
made to the subshell environment cannot affect the shell's execution
environment.
When the shell is in posix mode, subshells spawned to execute command
substitutions inherit the value of the --ee option from their parent
shell. When not in posix mode, bbaasshh clears the --ee option in such sub-
shells. See the description of the iinnhheerriitt__eerrrreexxiitt shell option below
for how to control this behavior when not in posix mode.
If a command is followed by a && and job control is not active, the de-
fault standard input for the command is the empty file _/_d_e_v_/_n_u_l_l. Oth-
erwise, the invoked command inherits the file descriptors of the call-
ing shell as modified by redirections.
EENNVVIIRROONNMMEENNTT
When a program is invoked it is given an array of strings called the
_e_n_v_i_r_o_n_m_e_n_t. This is a list of _n_a_m_e-_v_a_l_u_e pairs, of the form
_n_a_m_e=_v_a_l_u_e.
The shell provides several ways to manipulate the environment. On in-
vocation, the shell scans its own environment and creates a parameter
for each name found, automatically marking it for _e_x_p_o_r_t to child
processes. Executed commands inherit the environment. The eexxppoorrtt, ddee--
ccllaarree --xx, and uunnsseett commands modify the environment by adding and
deleting parameters and functions. If the value of a parameter in the
environment is modified, the new value automatically becomes part of
the environment, replacing the old. The environment inherited by any
executed command consists of the shell's initial environment, whose
values may be modified in the shell, less any pairs removed by the uunn--
sseett or eexxppoorrtt --nn commands, plus any additions via the eexxppoorrtt and ddee--
ccllaarree --xx commands.
If any parameter assignments, as described above in PPAARRAAMMEETTEERRSS, appear
before a _s_i_m_p_l_e _c_o_m_m_a_n_d, the variable assignments are part of that com-
mand's environment for as long as it executes. These assignment state-
ments affect only the environment seen by that command. If these as-
signments precede a call to a shell function, the variables are local
to the function and exported to that function's children.
If the --kk option is set (see the sseett builtin command below), then _a_l_l
parameter assignments are placed in the environment for a command, not
just those that precede the command name.
When bbaasshh invokes an external command, the variable __ is set to the
full pathname of the command and passed to that command in its environ-
ment.
EEXXIITT SSTTAATTUUSS
The exit status of an executed command is the value returned by the
_w_a_i_t_p_i_d system call or equivalent function. Exit statuses fall between
0 and 255, though, as explained below, the shell may use values above
125 specially. Exit statuses from shell builtins and compound commands
are also limited to this range. Under certain circumstances, the shell
will use special values to indicate specific failure modes.
For the shell's purposes, a command which exits with a zero exit status
has succeeded. So while an exit status of zero indicates success, a
non-zero exit status indicates failure.
When a command terminates on a fatal signal _N, bbaasshh uses the value of
128+_N as the exit status.
If a command is not found, the child process created to execute it re-
turns a status of 127. If a command is found but is not executable,
the return status is 126.
If a command fails because of an error during expansion or redirection,
the exit status is greater than zero.
Shell builtin commands return a status of 0 (_t_r_u_e) if successful, and
non-zero (_f_a_l_s_e) if an error occurs while they execute. All builtins
return an exit status of 2 to indicate incorrect usage, generally in-
valid options or missing arguments.
The exit status of the last command is available in the special parame-
ter $?.
BBaasshh itself returns the exit status of the last command executed, un-
less a syntax error occurs, in which case it exits with a non-zero
value. See also the eexxiitt builtin command below.
SSIIGGNNAALLSS
When bbaasshh is interactive, in the absence of any traps, it ignores
SSIIGGTTEERRMM (so that kkiillll 00 does not kill an interactive shell), and
catches and handles SSIIGGIINNTT (so that the wwaaiitt builtin is interruptible).
When bbaasshh receives SSIIGGIINNTT, it breaks out of any executing loops. In
all cases, bbaasshh ignores SSIIGGQQUUIITT. If job control is in effect, bbaasshh ig-
nores SSIIGGTTTTIINN, SSIIGGTTTTOOUU, and SSIIGGTTSSTTPP.
The ttrraapp builtin modifies the shell's signal handling, as described be-
low.
Non-builtin commands bbaasshh executes have signal handlers set to the val-
ues inherited by the shell from its parent, unless ttrraapp sets them to be
ignored, in which case the child process will ignore them as well.
When job control is not in effect, asynchronous commands ignore SSIIGGIINNTT
and SSIIGGQQUUIITT in addition to these inherited handlers. Commands run as a
result of command substitution ignore the keyboard-generated job con-
trol signals SSIIGGTTTTIINN, SSIIGGTTTTOOUU, and SSIIGGTTSSTTPP.
The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting,
an interactive shell resends the SSIIGGHHUUPP to all jobs, running or
stopped. The shell sends SSIIGGCCOONNTT to stopped jobs to ensure that they
receive the SSIIGGHHUUPP (see JJOOBB CCOONNTTRROOLL below for more information about
running and stopped jobs). To prevent the shell from sending the sig-
nal to a particular job, remove it from the jobs table with the ddiissoowwnn
builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or mark it not to receive
SSIIGGHHUUPP using ddiissoowwnn --hh.
If the hhuuppoonneexxiitt shell option has been set using sshhoopptt, bbaasshh sends a
SSIIGGHHUUPP to all jobs when an interactive login shell exits.
If bbaasshh is waiting for a command to complete and receives a signal for
which a trap has been set, it will not execute the trap until the com-
mand completes. If bbaasshh is waiting for an asynchronous command via the
wwaaiitt builtin, and it receives a signal for which a trap has been set,
the wwaaiitt builtin will return immediately with an exit status greater
than 128, immediately after which the shell executes the trap.
When job control is not enabled, and bbaasshh is waiting for a foreground
command to complete, the shell receives keyboard-generated signals such
as SSIIGGIINNTT (usually generated by ^^CC) that users commonly intend to send
to that command. This happens because the shell and the command are in
the same process group as the terminal, and ^^CC sends SSIIGGIINNTT to all
processes in that process group. Since bbaasshh does not enable job con-
trol by default when the shell is not interactive, this scenario is
most common in non-interactive shells.
When job control is enabled, and bbaasshh is waiting for a foreground com-
mand to complete, the shell does not receive keyboard-generated sig-
nals, because it is not in the same process group as the terminal.
This scenario is most common in interactive shells, where bbaasshh attempts
to enable job control by default. See JJOOBB CCOONNTTRROOLL below for more in-
formation about process groups.
When job control is not enabled, and bbaasshh receives SSIIGGIINNTT while waiting
for a foreground command, it waits until that foreground command termi-
nates and then decides what to do about the SSIIGGIINNTT:
1. If the command terminates due to the SSIIGGIINNTT, bbaasshh concludes that
the user meant to send the SSIIGGIINNTT to the shell as well, and acts
on the SSIIGGIINNTT (e.g., by running a SSIIGGIINNTT trap, exiting a non-in-
teractive shell, or returning to the top level to read a new
command).
2. If the command does not terminate due to SSIIGGIINNTT, the program
handled the SSIIGGIINNTT itself and did not treat it as a fatal sig-
nal. In that case, bbaasshh does not treat SSIIGGIINNTT as a fatal sig-
nal, either, instead assuming that the SSIIGGIINNTT was used as part
of the program's normal operation (e.g., emacs uses it to abort
editing commands) or deliberately discarded. However, bbaasshh will
run any trap set on SSIIGGIINNTT, as it does with any other trapped
signal it receives while it is waiting for the foreground com-
mand to complete, for compatibility.
When job control is enabled, bbaasshh does not receive keyboard-generated
signals such as SSIIGGIINNTT while it is waiting for a foreground command.
An interactive shell does not pay attention to the SSIIGGIINNTT, even if the
foreground command terminates as a result, other than noting its exit
status. If the shell is not interactive, and the foreground command
terminates due to the SSIIGGIINNTT, bbaasshh pretends it received the SSIIGGIINNTT it-
self (scenario 1 above), for compatibility.
JJOOBB CCOONNTTRROOLL
_J_o_b _c_o_n_t_r_o_l refers to the ability to selectively stop (_s_u_s_p_e_n_d) the ex-
ecution of processes and continue (_r_e_s_u_m_e) their execution at a later
point. A user typically employs this facility via an interactive in-
terface supplied jointly by the operating system kernel's terminal dri-
ver and bbaasshh.
The shell associates a _j_o_b with each pipeline. It keeps a table of
currently executing jobs, which the jjoobbss command will display. Each
job has a _j_o_b _n_u_m_b_e_r, which jjoobbss displays between brackets. Job num-
bers start at 1. When bbaasshh starts a job asynchronously (in the _b_a_c_k_-
_g_r_o_u_n_d), it prints a line that looks like:
[1] 25647
indicating that this job is job number 1 and that the process ID of the
last process in the pipeline associated with this job is 25647. All of
the processes in a single pipeline are members of the same job. BBaasshh
uses the _j_o_b abstraction as the basis for job control.
To facilitate the implementation of the user interface to job control,
each process has a _p_r_o_c_e_s_s _g_r_o_u_p _I_D, and the operating system maintains
the notion of a _c_u_r_r_e_n_t _t_e_r_m_i_n_a_l _p_r_o_c_e_s_s _g_r_o_u_p _I_D. This terminal
process group ID is associated with the _c_o_n_t_r_o_l_l_i_n_g _t_e_r_m_i_n_a_l.
Processes that have the same process group ID are said to be part of
the same _p_r_o_c_e_s_s _g_r_o_u_p. Members of the _f_o_r_e_g_r_o_u_n_d process group
(processes whose process group ID is equal to the current terminal
process group ID) receive keyboard-generated signals such as SSIIGGIINNTT.
Processes in the foreground process group are said to be _f_o_r_e_g_r_o_u_n_d
processes. _B_a_c_k_g_r_o_u_n_d processes are those whose process group ID dif-
fers from the controlling terminal's; such processes are immune to key-
board-generated signals. Only foreground processes are allowed to read
from or, if the user so specifies with "stty tostop", write to the con-
trolling terminal. The system sends a SSIIGGTTTTIINN ((SSIIGGTTTTOOUU)) signal to
background processes which attempt to read from (write to when "tostop"
is in effect) the terminal, which, unless caught, suspends the process.
If the operating system on which bbaasshh is running supports job control,
bbaasshh contains facilities to use it. Typing the _s_u_s_p_e_n_d character (typ-
ically ^^ZZ, Control-Z) while a process is running stops that process and
returns control to bbaasshh. Typing the _d_e_l_a_y_e_d _s_u_s_p_e_n_d character (typi-
cally ^^YY, Control-Y) causes the process stop when it attempts to read
input from the terminal, and returns control to bbaasshh. The user then
manipulates the state of this job, using the bbgg command to continue it
in the background, the ffgg command to continue it in the foreground, or
the kkiillll command to kill it. The suspend character takes effect imme-
diately, and has the additional side effect of discarding any pending
output and typeahead. To force a background process to stop, or stop a
process that's not associated with the current terminal session, send
it the SSIIGGSSTTOOPP signal using kkiillll.
There are a number of ways to refer to a job in the shell. The %% char-
acter introduces a job specification (jobspec).
Job number _n may be referred to as %%nn. A job may also be referred to
using a prefix of the name used to start it, or using a substring that
appears in its command line. For example, %%ccee refers to a job whose
command name begins with ccee. Using %%??ccee, on the other hand, refers to
any job containing the string ccee in its command line. If the prefix or
substring matches more than one job, bbaasshh reports an error.
The symbols %%%% and %%++ refer to the shell's notion of the _c_u_r_r_e_n_t _j_o_b.
A single % (with no accompanying job specification) also refers to the
current job. %%-- refers to the _p_r_e_v_i_o_u_s _j_o_b. When a job starts in the
background, a job stops while in the foreground, or a job is resumed in
the background, it becomes the current job. The job that was the cur-
rent job becomes the previous job. When the current job terminates,
the previous job becomes the current job. If there is only a single
job, %%++ and %%-- can both be used to refer to that job. In output per-
taining to jobs (e.g., the output of the jjoobbss command), the current job
is always marked with a ++, and the previous job with a --.
Simply naming a job can be used to bring it into the foreground: %%11 is
a synonym for "fg %1", bringing job 1 from the background into the
foreground. Similarly, "%1 &" resumes job 1 in the background, equiva-
lent to "bg %1".
The shell learns immediately whenever a job changes state. Normally,
bbaasshh waits until it is about to print a prompt before notifying the
user about changes in a job's status so as to not interrupt any other
output, though it will notify of changes in a job's status after a
foreground command in a list completes, before executing the next com-
mand in the list. If the --bb option to the sseett builtin command is en-
abled, bbaasshh reports status changes immediately. BBaasshh executes any trap
on SSIIGGCCHHLLDD for each child that terminates.
When a job terminates and bbaasshh notifies the user about it, bbaasshh removes
the job from the table. It will not appear in jjoobbss output, but wwaaiitt
will report its exit status, as long as it's supplied the process ID
associated with the job as an argument. When the table is empty, job
numbers start over at 1.
If a user attempts to exit bbaasshh while jobs are stopped (or, if the
cchheecckkjjoobbss shell option has been enabled using the sshhoopptt builtin, run-
ning), the shell prints a warning message, and, if the cchheecckkjjoobbss option
is enabled, lists the jobs and their statuses. The jjoobbss command may
then be used to inspect their status. If the user immediately attempts
to exit again, without an intervening command, bbaasshh does not print an-
other warning, and terminates any stopped jobs.
When the shell is waiting for a job or process using the wwaaiitt builtin,
and job control is enabled, wwaaiitt will return when the job changes
state. The --ff option causes wwaaiitt to wait until the job or process ter-
minates before returning.
PPRROOMMPPTTIINNGG
When executing interactively, bbaasshh displays the primary prompt PPSS11 when
it is ready to read a command, and the secondary prompt PPSS22 when it
needs more input to complete a command.
BBaasshh examines the value of the array variable PPRROOMMPPTT__CCOOMMMMAANNDD just be-
fore printing each primary prompt. If any elements in PPRROOMMPPTT__CCOOMMMMAANNDD
are set and non-null, Bash executes each value, in numeric order, just
as if it had been typed on the command line. BBaasshh displays PPSS00 after
it reads a command but before executing it.
BBaasshh displays PPSS44 as described above before tracing each command when
the --xx option is enabled.
BBaasshh allows the prompt strings PPSS00, PPSS11, PPSS22, and PPSS44, to be customized
by inserting a number of backslash-escaped special characters that are
decoded as follows:
\\aa An ASCII bell character (07).
\\dd The date in "Weekday Month Date" format (e.g., "Tue May
26").
\\DD{{_f_o_r_m_a_t}}
The _f_o_r_m_a_t is passed to _s_t_r_f_t_i_m_e(3) and the result is in-
serted into the prompt string; an empty _f_o_r_m_a_t results in
a locale-specific time representation. The braces are
required.
\\ee An ASCII escape character (033).
\\hh The hostname up to the first ".".
\\HH The hostname.
\\jj The number of jobs currently managed by the shell.
\\ll The basename of the shell's terminal device name (e.g.,
"ttys0").
\\nn A newline.
\\rr A carriage return.
\\ss The name of the shell: the basename of $$00 (the portion
following the final slash).
\\tt The current time in 24-hour HH:MM:SS format.
\\TT The current time in 12-hour HH:MM:SS format.
\\@@ The current time in 12-hour am/pm format.
\\AA The current time in 24-hour HH:MM format.
\\uu The username of the current user.
\\vv The bbaasshh version (e.g., 2.00).
\\VV The bbaasshh release, version + patch level (e.g., 2.00.0)
\\ww The value of the PPWWDD shell variable ($$PPWWDD), with $$HHOOMMEE
abbreviated with a tilde (uses the value of the
PPRROOMMPPTT__DDIIRRTTRRIIMM variable).
\\WW The basename of $$PPWWDD, with $$HHOOMMEE abbreviated with a
tilde.
\\!! The history number of this command.
\\## The command number of this command.
\\$$ If the effective UID is 0, a ##, otherwise a $$.
\\_n_n_n The character corresponding to the octal number _n_n_n.
\\\\ A backslash.
\\[[ Begin a sequence of non-printing characters, which could
be used to embed a terminal control sequence into the
prompt.
\\]] End a sequence of non-printing characters.
The command number and the history number are usually different: the
history number of a command is its position in the history list, which
may include commands restored from the history file (see HHIISSTTOORRYY be-
low), while the command number is the position in the sequence of com-
mands executed during the current shell session. After the string is
decoded, it is expanded via parameter expansion, command substitution,
arithmetic expansion, and quote removal, subject to the value of the
pprroommppttvvaarrss shell option (see the description of the sshhoopptt command under
SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). This can have unwanted side effects if
escaped portions of the string appear within command substitution or
contain characters special to word expansion.
RREEAADDLLIINNEE
This is the library that handles reading input when using an interac-
tive shell, unless the ----nnooeeddiittiinngg option is supplied at shell invoca-
tion. Line editing is also used when using the --ee option to the rreeaadd
builtin. By default, the line editing commands are similar to those of
emacs; a vi-style line editing interface is also available. Line edit-
ing can be enabled at any time using the --oo eemmaaccss or --oo vvii options to
the sseett builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). To turn off line
editing after the shell is running, use the ++oo eemmaaccss or ++oo vvii options
to the sseett builtin.
RReeaaddlliinnee NNoottaattiioonn
This section uses Emacs-style editing concepts and uses its notation
for keystrokes. Control keys are denoted by C-_k_e_y, e.g., C-n means
Control-N. Similarly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means
Meta-X. The Meta key is often labeled "Alt" or "Option".
On keyboards without a _M_e_t_a key, M-_x means ESC _x, i.e., press and re-
lease the Escape key, then press and release the _x key, in sequence.
This makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x means ESC Con-
trol-_x: press and release the Escape key, then press and hold the Con-
trol key while pressing the _x key, then release both.
On some keyboards, the Meta key modifier produces characters with the
eighth bit (0200) set. You can use the eennaabbllee--mmeettaa--kkeeyy variable to
control whether or not it does this, if the keyboard allows it. On
many others, the terminal or terminal emulator converts the metafied
key to a key sequence beginning with ESC as described in the preceding
paragraph.
If your _M_e_t_a key produces a key sequence with the ESC meta prefix, you
can make M-_k_e_y key bindings you specify (see RReeaaddlliinnee KKeeyy BBiinnddiinnggss be-
low) do the same thing by setting the ffoorrccee--mmeettaa--pprreeffiixx variable.
RReeaaddlliinnee commands may be given numeric _a_r_g_u_m_e_n_t_s, which normally act as
a repeat count. Sometimes, however, it is the sign of the argument
that is significant. Passing a negative argument to a command that
acts in the forward direction (e.g., kkiillll--lliinnee) makes that command act
in a backward direction. Commands whose behavior with arguments devi-
ates from this are noted below.
The _p_o_i_n_t is the current cursor position, and _m_a_r_k refers to a saved
cursor position. The text between the point and mark is referred to as
the _r_e_g_i_o_n. RReeaaddlliinnee has the concept of an _a_c_t_i_v_e _r_e_g_i_o_n: when the re-
gion is active, rreeaaddlliinnee redisplay highlights the region using the
value of the aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr variable. The eennaabbllee--aaccttiivvee--rree--
ggiioonn variable turns this on and off. Several commands set the region
to active; those are noted below.
When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved
for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a
_k_i_l_l _r_i_n_g. Consecutive kills accumulate the deleted text into one
unit, which can be yanked all at once. Commands which do not kill text
separate the chunks of text on the kill ring.
RReeaaddlliinnee IInniittiiaalliizzaattiioonn
RReeaaddlliinnee is customized by putting commands in an initialization file
(the _i_n_p_u_t_r_c file). The name of this file is taken from the value of
the IINNPPUUTTRRCC shell variable. If that variable is unset, the default is
_~_/_._i_n_p_u_t_r_c. If that file does not exist or cannot be read, rreeaaddlliinnee
looks for _/_e_t_c_/_i_n_p_u_t_r_c. When a program that uses the rreeaaddlliinnee library
starts up, rreeaaddlliinnee reads the initialization file and sets the key
bindings and variables found there, before reading any user input.
There are only a few basic constructs allowed in the inputrc file.
Blank lines are ignored. Lines beginning with a ## are comments. Lines
beginning with a $$ indicate conditional constructs. Other lines denote
key bindings and variable settings.
The default key-bindings in this section may be changed using key bind-
ing commands in the _i_n_p_u_t_r_c file. Programs that use the rreeaaddlliinnee li-
brary, including bbaasshh, may add their own commands and bindings.
For example, placing
M-Control-u: universal-argument
or
C-Meta-u: universal-argument
into the _i_n_p_u_t_r_c would make M-C-u execute the rreeaaddlliinnee command _u_n_i_v_e_r_-
_s_a_l_-_a_r_g_u_m_e_n_t.
Key bindings may contain the following symbolic character names: _D_E_L,
_E_S_C, _E_S_C_A_P_E, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _R_U_B_O_U_T (a destructive back-
space), _S_P_A_C_E, _S_P_C, and _T_A_B.
In addition to command names, rreeaaddlliinnee allows keys to be bound to a
string that is inserted when the key is pressed (a _m_a_c_r_o). The differ-
ence between a macro and a command is that a macro is enclosed in sin-
gle or double quotes.
RReeaaddlliinnee KKeeyy BBiinnddiinnggss
The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple.
All that is required is the name of the command or the text of a macro
and a key sequence to which it should be bound. The key sequence may
be specified in one of two ways: as a symbolic key name, possibly with
_M_e_t_a_- or _C_o_n_t_r_o_l_- prefixes, or as a key sequence composed of one or
more characters enclosed in double quotes. The key sequence and name
are separated by a colon. There can be no whitespace between the name
and the colon.
When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e is the name
of a key spelled out in English. For example:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt,
_M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to
run the macro expressed on the right hand side (that is, to insert the
text "> output" into the line).
In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs
from kkeeyynnaammee above in that strings denoting an entire key sequence may
be specified by placing the sequence within double quotes. Some GNU
Emacs style key escapes can be used, as in the following example, but
none of the symbolic character names are recognized.
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt.
_C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is
bound to insert the text "Function Key 1".
The full set of GNU Emacs style escape sequences available when speci-
fying key sequences is
\\CC-- A control prefix.
\\MM-- Adding the meta prefix or converting the following char-
acter to a meta character, as described below under
ffoorrccee--mmeettaa--pprreeffiixx.
\\ee An escape character.
\\\\ Backslash.
\\"" Literal ", a double quote.
\\'' Literal ', a single quote.
In addition to the GNU Emacs style escape sequences, a second set of
backslash escapes is available:
\\aa alert (bell)
\\bb backspace
\\dd delete
\\ff form feed
\\nn newline
\\rr carriage return
\\tt horizontal tab
\\vv vertical tab
\\_n_n_n The eight-bit character whose value is the octal value
_n_n_n (one to three digits).
\\xx_H_H The eight-bit character whose value is the hexadecimal
value _H_H (one or two hex digits).
When entering the text of a macro, single or double quotes must be used
to indicate a macro definition. Unquoted text is assumed to be a func-
tion name. The backslash escapes described above are expanded in the
macro body. Backslash quotes any other character in the macro text,
including " and '.
BBaasshh will display or modify the current rreeaaddlliinnee key bindings with the
bbiinndd builtin command. The --oo eemmaaccss or --oo vvii options to the sseett builtin
(see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) change the editing mode during in-
teractive use.
RReeaaddlliinnee VVaarriiaabblleess
RReeaaddlliinnee has variables that can be used to further customize its behav-
ior. A variable may be set in the _i_n_p_u_t_r_c file with a statement of the
form
sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e
or using the bbiinndd builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
Except where noted, rreeaaddlliinnee variables can take the values OOnn or OOffff
(without regard to case). Unrecognized variable names are ignored.
When rreeaaddlliinnee reads a variable value, empty or null values, "on" (case-
insensitive), and "1" are equivalent to OOnn. All other values are
equivalent to OOffff.
The bbiinndd --VV command lists the current rreeaaddlliinnee variable names and val-
ues (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
The variables and their default values are:
aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr
A string variable that controls the text color and background
when displaying the text in the active region (see the descrip-
tion of eennaabbllee--aaccttiivvee--rreeggiioonn below). This string must not take
up any physical character positions on the display, so it should
consist only of terminal escape sequences. It is output to the
terminal before displaying the text in the active region. This
variable is reset to the default value whenever the terminal
type changes. The default value is the string that puts the
terminal in standout mode, as obtained from the terminal's ter-
minfo description. A sample value might be "\e[01;33m".
aaccttiivvee--rreeggiioonn--eenndd--ccoolloorr
A string variable that "undoes" the effects of aaccttiivvee--rree--
ggiioonn--ssttaarrtt--ccoolloorr and restores "normal" terminal display appear-
ance after displaying text in the active region. This string
must not take up any physical character positions on the dis-
play, so it should consist only of terminal escape sequences.
It is output to the terminal after displaying the text in the
active region. This variable is reset to the default value
whenever the terminal type changes. The default value is the
string that restores the terminal from standout mode, as ob-
tained from the terminal's terminfo description. A sample value
might be "\e[0m".
bbeellll--ssttyyllee ((aauuddiibbllee))
Controls what happens when rreeaaddlliinnee wants to ring the terminal
bell. If set to nnoonnee, rreeaaddlliinnee never rings the bell. If set to
vviissiibbllee, rreeaaddlliinnee uses a visible bell if one is available. If
set to aauuddiibbllee, rreeaaddlliinnee attempts to ring the terminal's bell.
bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn))
If set to OOnn, rreeaaddlliinnee attempts to bind the control characters
that are treated specially by the kernel's terminal driver to
their rreeaaddlliinnee equivalents. These override the default rreeaaddlliinnee
bindings described here. Type "stty -a" at a bbaasshh prompt to see
your current terminal settings, including the special control
characters (usually cccchhaarrss).
bblliinnkk--mmaattcchhiinngg--ppaarreenn ((OOffff))
If set to OOnn, rreeaaddlliinnee attempts to briefly move the cursor to an
opening parenthesis when a closing parenthesis is inserted.
ccoolloorreedd--ccoommpplleettiioonn--pprreeffiixx ((OOffff))
If set to OOnn, when listing completions, rreeaaddlliinnee displays the
common prefix of the set of possible completions using a differ-
ent color. The color definitions are taken from the value of
the LLSS__CCOOLLOORRSS environment variable. If there is a color defini-
tion in $$LLSS__CCOOLLOORRSS for the custom suffix ".readline-colored-com-
pletion-prefix", rreeaaddlliinnee uses this color for the common prefix
instead of its default.
ccoolloorreedd--ssttaattss ((OOffff))
If set to OOnn, rreeaaddlliinnee displays possible completions using dif-
ferent colors to indicate their file type. The color defini-
tions are taken from the value of the LLSS__CCOOLLOORRSS environment
variable.
ccoommmmeenntt--bbeeggiinn (("##"))
The string that the rreeaaddlliinnee iinnsseerrtt--ccoommmmeenntt command inserts.
This command is bound to MM--## in emacs mode and to ## in vi com-
mand mode.
ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh ((--11))
The number of screen columns used to display possible matches
when performing completion. The value is ignored if it is less
than 0 or greater than the terminal screen width. A value of 0
causes matches to be displayed one per line. The default value
is -1.
ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff))
If set to OOnn, rreeaaddlliinnee performs filename matching and completion
in a case-insensitive fashion.
ccoommpplleettiioonn--mmaapp--ccaassee ((OOffff))
If set to OOnn, and ccoommpplleettiioonn--iiggnnoorree--ccaassee is enabled, rreeaaddlliinnee
treats hyphens (_-) and underscores (__) as equivalent when per-
forming case-insensitive filename matching and completion.
ccoommpplleettiioonn--pprreeffiixx--ddiissppllaayy--lleennggtthh ((00))
The maximum length in characters of the common prefix of a list
of possible completions that is displayed without modification.
When set to a value greater than zero, rreeaaddlliinnee replaces common
prefixes longer than this value with an ellipsis when displaying
possible completions. If a completion begins with a period, and
eeaaddlliinnee is completing filenames, it uses three underscores in-
stead of an ellipsis.
ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000))
This determines when the user is queried about viewing the num-
ber of possible completions generated by the ppoossssiibbllee--ccoommppllee--
ttiioonnss command. It may be set to any integer value greater than
or equal to zero. If the number of possible completions is
greater than or equal to the value of this variable, rreeaaddlliinnee
asks whether or not the user wishes to view them; otherwise
rreeaaddlliinnee simply lists them on the terminal. A zero value means
rreeaaddlliinnee should never ask; negative values are treated as zero.
ccoonnvveerrtt--mmeettaa ((OOnn))
If set to OOnn, rreeaaddlliinnee converts characters it reads that have
the eighth bit set to an ASCII key sequence by clearing the
eighth bit and prefixing it with an escape character (converting
the character to have the meta prefix). The default is _O_n, but
rreeaaddlliinnee sets it to _O_f_f if the locale contains characters whose
encodings may include bytes with the eighth bit set. This vari-
able is dependent on the LLCC__CCTTYYPPEE locale category, and may
change if the locale changes. This variable also affects key
bindings; see the description of ffoorrccee--mmeettaa--pprreeffiixx below.
ddiissaabbllee--ccoommpplleettiioonn ((OOffff))
If set to OOnn, rreeaaddlliinnee inhibits word completion. Completion
characters are inserted into the line as if they had been mapped
to sseellff--iinnsseerrtt.
eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn))
When set to OOnn, on operating systems that indicate they support
it, rreeaaddlliinnee echoes a character corresponding to a signal gener-
ated from the keyboard.
eeddiittiinngg--mmooddee ((eemmaaccss))
Controls whether rreeaaddlliinnee uses a set of key bindings similar to
_E_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or vvii.
eemmaaccss--mmooddee--ssttrriinngg ((@@))
If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is
displayed immediately before the last line of the primary prompt
when emacs editing mode is active. The value is expanded like a
key binding, so the standard set of meta- and control- prefixes
and backslash escape sequences is available. The \1 and \2 es-
capes begin and end sequences of non-printing characters, which
can be used to embed a terminal control sequence into the mode
string.
eennaabbllee--aaccttiivvee--rreeggiioonn ((OOnn))
When this variable is set to _O_n, rreeaaddlliinnee allows certain com-
mands to designate the region as _a_c_t_i_v_e. When the region is ac-
tive, rreeaaddlliinnee highlights the text in the region using the value
of the aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr variable, which defaults to the
string that enables the terminal's standout mode. The active
region shows the text inserted by bracketed-paste and any match-
ing text found by incremental and non-incremental history
searches.
eennaabbllee--bbrraacckkeetteedd--ppaassttee ((OOnn))
When set to OOnn, rreeaaddlliinnee configures the terminal to insert each
paste into the editing buffer as a single string of characters,
instead of treating each character as if it had been read from
the keyboard. This is called _b_r_a_c_k_e_t_e_d_-_p_a_s_t_e _m_o_d_e; it prevents
rreeaaddlliinnee from executing any editing commands bound to key se-
quences appearing in the pasted text.
eennaabbllee--kkeeyyppaadd ((OOffff))
When set to OOnn, rreeaaddlliinnee tries to enable the application keypad
when it is called. Some systems need this to enable the arrow
keys.
eennaabbllee--mmeettaa--kkeeyy ((OOnn))
When set to OOnn, rreeaaddlliinnee tries to enable any meta modifier key
the terminal claims to support. On many terminals, the Meta key
is used to send eight-bit characters; this variable checks for
the terminal capability that indicates the terminal can enable
and disable a mode that sets the eighth bit of a character
(0200) if the Meta key is held down when the character is typed
(a meta character).
eexxppaanndd--ttiillddee ((OOffff))
If set to OOnn, rreeaaddlliinnee performs tilde expansion when it attempts
word completion.
ffoorrccee--mmeettaa--pprreeffiixx ((OOffff))
If set to OOnn, rreeaaddlliinnee modifies its behavior when binding key
sequences containing \M- or Meta- (see KKeeyy BBiinnddiinnggss above) by
converting a key sequence of the form \M-_C or Meta-_C to the two-
character sequence EESSCC _C (adding the meta prefix). If
ffoorrccee--mmeettaa--pprreeffiixx is set to OOffff (the default), rreeaaddlliinnee uses the
value of the ccoonnvveerrtt--mmeettaa variable to determine whether to per-
form this conversion: if ccoonnvveerrtt--mmeettaa is OOnn, rreeaaddlliinnee performs
the conversion described above; if it is OOffff, rreeaaddlliinnee converts
_C to a meta character by setting the eighth bit (0200).
hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff))
If set to OOnn, the history code attempts to place point at the
same location on each history line retrieved with pprreevviioouuss--hhiiss--
ttoorryy or nneexxtt--hhiissttoorryy.
hhiissttoorryy--ssiizzee ((uunnsseett))
Set the maximum number of history entries saved in the history
list. If set to zero, any existing history entries are deleted
and no new entries are saved. If set to a value less than zero,
the number of history entries is not limited. By default, bbaasshh
sets the maximum number of history entries to the value of the
HHIISSTTSSIIZZEE shell variable. Setting _h_i_s_t_o_r_y_-_s_i_z_e to a non-numeric
value will set the maximum number of history entries to 500.
hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff))
Setting this variable to OOnn makes rreeaaddlliinnee use a single line for
display, scrolling the input horizontally on a single screen
line when it becomes longer than the screen width rather than
wrapping to a new line. This setting is automatically enabled
for terminals of height 1.
iinnppuutt--mmeettaa ((OOffff))
If set to OOnn, rreeaaddlliinnee enables eight-bit input (that is, it does
not clear the eighth bit in the characters it reads), regardless
of what the terminal claims it can support. The default is _O_f_f,
but rreeaaddlliinnee sets it to _O_n if the locale contains characters
whose encodings may include bytes with the eighth bit set. This
variable is dependent on the LLCC__CCTTYYPPEE locale category, and its
value may change if the locale changes. The name mmeettaa--ffllaagg is a
synonym for iinnppuutt--mmeettaa.
iisseeaarrcchh--tteerrmmiinnaattoorrss (("CC--[[CC--jj"))
The string of characters that should terminate an incremental
search without subsequently executing the character as a com-
mand. If this variable has not been given a value, the charac-
ters _E_S_C and CC--jj terminate an incremental search.
kkeeyymmaapp ((eemmaaccss))
Set the current rreeaaddlliinnee keymap. The set of valid keymap names
is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_-
_m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is
equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the
value of eeddiittiinngg--mmooddee also affects the default keymap.
kkeeyysseeqq--ttiimmeeoouutt ((550000))
Specifies the duration rreeaaddlliinnee will wait for a character when
reading an ambiguous key sequence (one that can form a complete
key sequence using the input read so far, or can take additional
input to complete a longer key sequence). If rreeaaddlliinnee does not
receive any input within the timeout, it uses the shorter but
complete key sequence. The value is specified in milliseconds,
so a value of 1000 means that rreeaaddlliinnee will wait one second for
additional input. If this variable is set to a value less than
or equal to zero, or to a non-numeric value, rreeaaddlliinnee waits un-
til another key is pressed to decide which key sequence to com-
plete.
mmaarrkk--ddiirreeccttoorriieess ((OOnn))
If set to OOnn, completed directory names have a slash appended.
mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff))
If set to OOnn, rreeaaddlliinnee displays history lines that have been
modified with a preceding asterisk (**).
mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff))
If set to OOnn, completed names which are symbolic links to direc-
tories have a slash appended, subject to the value of mmaarrkk--ddii--
rreeccttoorriieess.
mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn))
This variable, when set to OOnn, forces rreeaaddlliinnee to match files
whose names begin with a "." (hidden files) when performing
filename completion. If set to OOffff, the user must include the
leading "." in the filename to be completed.
mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff))
If set to OOnn, menu completion displays the common prefix of the
list of possible completions (which may be empty) before cycling
through the list.
oouuttppuutt--mmeettaa ((OOffff))
If set to OOnn, rreeaaddlliinnee displays characters with the eighth bit
set directly rather than as a meta-prefixed escape sequence.
The default is _O_f_f, but rreeaaddlliinnee sets it to _O_n if the locale
contains characters whose encodings may include bytes with the
eighth bit set. This variable is dependent on the LLCC__CCTTYYPPEE lo-
cale category, and its value may change if the locale changes.
ppaaggee--ccoommpplleettiioonnss ((OOnn))
If set to OOnn, rreeaaddlliinnee uses an internal pager resembling _m_o_r_e(1)
to display a screenful of possible completions at a time.
pprreeffeerr--vviissiibbllee--bbeellll
See bbeellll--ssttyyllee.
pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff))
If set to OOnn, rreeaaddlliinnee displays completions with matches sorted
horizontally in alphabetical order, rather than down the screen.
rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff))
If set to OOnn, rreeaaddlliinnee will undo all changes to history lines
before returning when executing aacccceepptt--lliinnee. By default, his-
tory lines may be modified and retain individual undo lists
across calls to rreeaaddlliinnee.
sseeaarrcchh--iiggnnoorree--ccaassee ((OOffff))
If set to OOnn, rreeaaddlliinnee performs incremental and non-incremental
history list searches in a case-insensitive fashion.
sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff))
This alters the default behavior of the completion functions.
If set to OOnn, words which have more than one possible completion
cause the matches to be listed immediately instead of ringing
the bell.
sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff))
This alters the default behavior of the completion functions in
a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words
which have more than one possible completion without any possi-
ble partial completion (the possible completions don't share a
common prefix) cause the matches to be listed immediately in-
stead of ringing the bell.
sshhooww--mmooddee--iinn--pprroommpptt ((OOffff))
If set to OOnn, add a string to the beginning of the prompt indi-
cating the editing mode: emacs, vi command, or vi insertion.
The mode strings are user-settable (e.g., _e_m_a_c_s_-_m_o_d_e_-_s_t_r_i_n_g).
sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff))
If set to OOnn, this alters the default completion behavior when
inserting a single match into the line. It's only active when
performing completion in the middle of a word. If enabled,
rreeaaddlliinnee does not insert characters from the completion that
match characters after point in the word being completed, so
portions of the word following the cursor are not duplicated.
vvii--ccmmdd--mmooddee--ssttrriinngg ((((ccmmdd))))
If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is
displayed immediately before the last line of the primary prompt
when vi editing mode is active and in command mode. The value
is expanded like a key binding, so the standard set of meta- and
control- prefixes and backslash escape sequences is available.
The \1 and \2 escapes begin and end sequences of non-printing
characters, which can be used to embed a terminal control se-
quence into the mode string.
vvii--iinnss--mmooddee--ssttrriinngg ((((iinnss))))
If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is
displayed immediately before the last line of the primary prompt
when vi editing mode is active and in insertion mode. The value
is expanded like a key binding, so the standard set of meta- and
control- prefixes and backslash escape sequences is available.
The \1 and \2 escapes begin and end sequences of non-printing
characters, which can be used to embed a terminal control se-
quence into the mode string.
vviissiibbllee--ssttaattss ((OOffff))
If set to OOnn, a character denoting a file's type as reported by
_s_t_a_t(2) is appended to the filename when listing possible com-
pletions.
RReeaaddlliinnee CCoonnddiittiioonnaall CCoonnssttrruuccttss
RReeaaddlliinnee implements a facility similar in spirit to the conditional
compilation features of the C preprocessor which allows key bindings
and variable settings to be performed as the result of tests. There
are four parser directives available.
$$iiff The $$iiff construct allows bindings to be made based on the edit-
ing mode, the terminal being used, or the application using
rreeaaddlliinnee. The text of the test, after any comparison operator,
extends to the end of the line; unless otherwise noted, no char-
acters are required to isolate it.
mmooddee The mmooddee== form of the $$iiff directive is used to test
whether rreeaaddlliinnee is in emacs or vi mode. This may be
used in conjunction with the sseett kkeeyymmaapp command, for in-
stance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and
_e_m_a_c_s_-_c_t_l_x keymaps only if rreeaaddlliinnee is starting out in
emacs mode.
tteerrmm The tteerrmm== form may be used to include terminal-specific
key bindings, perhaps to bind the key sequences output by
the terminal's function keys. The word on the right side
of the == is tested against both the full name of the ter-
minal and the portion of the terminal name before the
first --. This allows _x_t_e_r_m to match both _x_t_e_r_m and
_x_t_e_r_m_-_2_5_6_c_o_l_o_r, for instance.
vveerrssiioonn
The vveerrssiioonn test may be used to perform comparisons
against specific rreeaaddlliinnee versions. The vveerrssiioonn expands
to the current rreeaaddlliinnee version. The set of comparison
operators includes ==, (and ====), !!==, <<==, >>==, <<, and >>.
The version number supplied on the right side of the op-
erator consists of a major version number, an optional
decimal point, and an optional minor version (e.g., 77..11).
If the minor version is omitted, it defaults to 00. The
operator may be separated from the string vveerrssiioonn and
from the version number argument by whitespace.
_a_p_p_l_i_c_a_t_i_o_n
The _a_p_p_l_i_c_a_t_i_o_n construct is used to include application-
specific settings. Each program using the rreeaaddlliinnee li-
brary sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization
file can test for a particular value. This could be used
to bind key sequences to functions useful for a specific
program. For instance, the following command adds a key
sequence that quotes the current or previous word in
bbaasshh:
$$iiff Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$$eennddiiff
_v_a_r_i_a_b_l_e
The _v_a_r_i_a_b_l_e construct provides simple equality tests for
rreeaaddlliinnee variables and values. The permitted comparison
operators are _=, _=_=, and _!_=. The variable name must be
separated from the comparison operator by whitespace; the
operator may be separated from the value on the right
hand side by whitespace. String and boolean variables
may be tested. Boolean variables must be tested against
the values _o_n and _o_f_f.
$$eellssee Commands in this branch of the $$iiff directive are executed if the
test fails.
$$eennddiiff This command, as seen in the previous example, terminates an $$iiff
command.
$$iinncclluuddee
This directive takes a single filename as an argument and reads
commands and key bindings from that file. For example, the fol-
lowing directive would read _/_e_t_c_/_i_n_p_u_t_r_c:
$$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c
SSeeaarrcchhiinngg
RReeaaddlliinnee provides commands for searching through the command history
(see HHIISSTTOORRYY below) for lines containing a specified string. There are
two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l.
Incremental searches begin before the user has finished typing the
search string. As each character of the search string is typed, rreeaadd--
lliinnee displays the next entry from the history matching the string typed
so far. An incremental search requires only as many characters as
needed to find the desired history entry. When using emacs editing
mode, type CC--rr to search backward in the history for a particular
string. Typing CC--ss searches forward through the history. The charac-
ters present in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used
to terminate an incremental search. If that variable has not been as-
signed a value, _E_S_C and CC--jj terminate an incremental search. CC--gg
aborts an incremental search and restores the original line. When the
search is terminated, the history entry containing the search string
becomes the current line.
To find other matching entries in the history list, type CC--rr or CC--ss as
appropriate. This searches backward or forward in the history for the
next entry matching the search string typed so far. Any other key se-
quence bound to a rreeaaddlliinnee command terminates the search and executes
that command. For instance, a newline terminates the search and ac-
cepts the line, thereby executing the command from the history list. A
movement command will terminate the search, make the last line found
the current line, and begin editing.
RReeaaddlliinnee remembers the last incremental search string. If two CC--rrs are
typed without any intervening characters defining a new search string,
rreeaaddlliinnee uses any remembered search string.
Non-incremental searches read the entire search string before starting
to search for matching history entries. The search string may be typed
by the user or be part of the contents of the current line.
RReeaaddlliinnee CCoommmmaanndd NNaammeess
The following is a list of the names of the commands and the default
key sequences to which they are bound. Command names without an accom-
panying key sequence are unbound by default.
In the following descriptions, _p_o_i_n_t refers to the current cursor posi-
tion, and _m_a_r_k refers to a cursor position saved by the sseett--mmaarrkk com-
mand. The text between the point and mark is referred to as the _r_e_-
_g_i_o_n. RReeaaddlliinnee has the concept of an _a_c_t_i_v_e _r_e_g_i_o_n: when the region is
active, rreeaaddlliinnee redisplay highlights the region using the value of the
aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr variable. The eennaabbllee--aaccttiivvee--rreeggiioonn rreeaaddlliinnee
variable turns this on and off. Several commands set the region to ac-
tive; those are noted below.
CCoommmmaannddss ffoorr MMoovviinngg
bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa))
Move to the start of the current line. This may also be bound
to the Home key on some keyboards.
eenndd--ooff--lliinnee ((CC--ee))
Move to the end of the line. This may also be bound to the End
key on some keyboards.
ffoorrwwaarrdd--cchhaarr ((CC--ff))
Move forward a character. This may also be bound to the right
arrow key on some keyboards.
bbaacckkwwaarrdd--cchhaarr ((CC--bb))
Move back a character. This may also be bound to the left arrow
key on some keyboards.
ffoorrwwaarrdd--wwoorrdd ((MM--ff))
Move forward to the end of the next word. Words are composed of
alphanumeric characters (letters and digits).
bbaacckkwwaarrdd--wwoorrdd ((MM--bb))
Move back to the start of the current or previous word. Words
are composed of alphanumeric characters (letters and digits).
sshheellll--ffoorrwwaarrdd--wwoorrdd ((MM--CC--ff))
Move forward to the end of the next word. Words are delimited
by non-quoted shell metacharacters.
sshheellll--bbaacckkwwaarrdd--wwoorrdd ((MM--CC--bb))
Move back to the start of the current or previous word. Words
are delimited by non-quoted shell metacharacters.
pprreevviioouuss--ssccrreeeenn--lliinnee
Attempt to move point to the same physical screen column on the
previous physical screen line. This will not have the desired
effect if the current rreeaaddlliinnee line does not take up more than
one physical line or if point is not greater than the length of
the prompt plus the screen width.
nneexxtt--ssccrreeeenn--lliinnee
Attempt to move point to the same physical screen column on the
next physical screen line. This will not have the desired ef-
fect if the current rreeaaddlliinnee line does not take up more than one
physical line or if the length of the current rreeaaddlliinnee line is
not greater than the length of the prompt plus the screen width.
cclleeaarr--ddiissppllaayy ((MM--CC--ll))
Clear the screen and, if possible, the terminal's scrollback
buffer, then redraw the current line, leaving the current line
at the top of the screen.
cclleeaarr--ssccrreeeenn ((CC--ll))
Clear the screen, then redraw the current line, leaving the cur-
rent line at the top of the screen. With a numeric argument,
refresh the current line without clearing the screen.
rreeddrraaww--ccuurrrreenntt--lliinnee
Refresh the current line.
CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy
aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn))
Accept the line regardless of where the cursor is. If this line
is non-empty, add it to the history list according to the state
of the HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables. If the line is a
modified history line, restore the history line to its original
state.
pprreevviioouuss--hhiissttoorryy ((CC--pp))
Fetch the previous command from the history list, moving back in
the list. This may also be bound to the up arrow key on some
keyboards.
nneexxtt--hhiissttoorryy ((CC--nn))
Fetch the next command from the history list, moving forward in
the list. This may also be bound to the down arrow key on some
keyboards.
bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<))
Move to the first line in the history.
eenndd--ooff--hhiissttoorryy ((MM-->>))
Move to the end of the input history, i.e., the line currently
being entered.
ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo))
Accept the current line for execution as if a newline had been
entered, and fetch the next line relative to the current line
from the history for editing. A numeric argument, if supplied,
specifies the history entry to use instead of the current line.
ffeettcchh--hhiissttoorryy
With a numeric argument, fetch that entry from the history list
and make it the current line. Without an argument, move back to
the first entry in the history list.
rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr))
Search backward starting at the current line and moving "up"
through the history as necessary. This is an incremental
search. This command sets the region to the matched text and
activates the region.
ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss))
Search forward starting at the current line and moving "down"
through the history as necessary. This is an incremental
search. This command sets the region to the matched text and
activates the region.
nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp))
Search backward through the history starting at the current line
using a non-incremental search for a string supplied by the
user. The search string may match anywhere in a history line.
nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn))
Search forward through the history using a non-incremental
search for a string supplied by the user. The search string may
match anywhere in a history line.
hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd
Search backward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. This may be bound to the Page Up key on
some keyboards.
hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. This may be bound to the Page Down key
on some keyboards.
hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--bbaacckkwwaarrdd
Search backward through the history for the string of characters
between the start of the current line and the point. The search
string may match anywhere in a history line. This is a non-in-
cremental search.
hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--ffoorrwwaarrdd
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string may match anywhere in a history line. This is a non-in-
cremental search.
yyaannkk--nntthh--aarrgg ((MM--CC--yy))
Insert the first argument to the previous command (usually the
second word on the previous line) at point. With an argument _n,
insert the _nth word from the previous command (the words in the
previous command begin with word 0). A negative argument in-
serts the _nth word from the end of the previous command. Once
the argument _n is computed, this uses the history expansion fa-
cilities to extract the _nth word, as if the "!_n" history expan-
sion had been specified.
yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__))
Insert the last argument to the previous command (the last word
of the previous history entry). With a numeric argument, behave
exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg
move back through the history list, inserting the last word (or
the word specified by the argument to the first call) of each
line in turn. Any numeric argument supplied to these successive
calls determines the direction to move through the history. A
negative argument switches the direction through the history
(back or forward). This uses the history expansion facilities
to extract the last word, as if the "!$" history expansion had
been specified.
sshheellll--eexxppaanndd--lliinnee ((MM--CC--ee))
Expand the line by performing shell word expansions. This per-
forms alias and history expansion, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quot-
ing, tilde expansion, parameter and variable expansion, arith-
metic expansion, command and process substitution, word split-
ting, and quote removal. An explicit argument suppresses com-
mand and process substitution. See HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for
a description of history expansion.
hhiissttoorryy--eexxppaanndd--lliinnee ((MM--^^))
Perform history expansion on the current line. See HHIISSTTOORRYY EEXX--
PPAANNSSIIOONN below for a description of history expansion.
mmaaggiicc--ssppaaccee
Perform history expansion on the current line and insert a
space. See HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for a description of history
expansion.
aalliiaass--eexxppaanndd--lliinnee
Perform alias expansion on the current line. See AALLIIAASSEESS above
for a description of alias expansion.
hhiissttoorryy--aanndd--aalliiaass--eexxppaanndd--lliinnee
Perform history and alias expansion on the current line.
iinnsseerrtt--llaasstt--aarrgguummeenntt ((MM--..,, MM--__))
A synonym for yyaannkk--llaasstt--aarrgg.
eeddiitt--aanndd--eexxeeccuuttee--ccoommmmaanndd ((CC--xx CC--ee))
Invoke an editor on the current command line, and execute the
result as shell commands. BBaasshh attempts to invoke $$VVIISSUUAALL, $$EEDD--
IITTOORR, and _e_m_a_c_s as the editor, in that order.
CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt
_e_n_d_-_o_f_-_f_i_l_e ((uussuuaallllyy CC--dd))
The character indicating end-of-file as set, for example, by
_s_t_t_y(1). If this character is read when there are no characters
on the line, and point is at the beginning of the line, rreeaaddlliinnee
interprets it as the end of input and returns EEOOFF.
ddeelleettee--cchhaarr ((CC--dd))
Delete the character at point. If this function is bound to the
same character as the tty EEOOFF character, as CC--dd commonly is, see
above for the effects. This may also be bound to the Delete key
on some keyboards.
bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt))
Delete the character behind the cursor. When given a numeric
argument, save the deleted text on the kill ring.
ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr
Delete the character under the cursor, unless the cursor is at
the end of the line, in which case the character behind the cur-
sor is deleted.
qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv))
Add the next character typed to the line verbatim. This is how
to insert characters like CC--qq, for example.
ttaabb--iinnsseerrtt ((CC--vv TTAABB))
Insert a tab character.
sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ...))
Insert the character typed.
bbrraacckkeetteedd--ppaassttee--bbeeggiinn
This function is intended to be bound to the "bracketed paste"
escape sequence sent by some terminals, and such a binding is
assigned by default. It allows rreeaaddlliinnee to insert the pasted
text as a single unit without treating each character as if it
had been read from the keyboard. The pasted characters are in-
serted as if each one was bound to sseellff--iinnsseerrtt instead of exe-
cuting any editing commands.
Bracketed paste sets the region to the inserted text and acti-
vates the region.
ttrraannssppoossee--cchhaarrss ((CC--tt))
Drag the character before point forward over the character at
point, moving point forward as well. If point is at the end of
the line, then this transposes the two characters before point.
Negative arguments have no effect.
ttrraannssppoossee--wwoorrddss ((MM--tt))
Drag the word before point past the word after point, moving
point past that word as well. If point is at the end of the
line, this transposes the last two words on the line.
sshheellll--ttrraannssppoossee--wwoorrddss ((MM--CC--tt))
Drag the word before point past the word after point, moving
point past that word as well. If the insertion point is at the
end of the line, this transposes the last two words on the line.
Word boundaries are the same as sshheellll--ffoorrwwaarrdd--wwoorrdd and
sshheellll--bbaacckkwwaarrdd--wwoorrdd.
uuppccaassee--wwoorrdd ((MM--uu))
Uppercase the current (or following) word. With a negative ar-
gument, uppercase the previous word, but do not move point.
ddoowwnnccaassee--wwoorrdd ((MM--ll))
Lowercase the current (or following) word. With a negative ar-
gument, lowercase the previous word, but do not move point.
ccaappiittaalliizzee--wwoorrdd ((MM--cc))
Capitalize the current (or following) word. With a negative ar-
gument, capitalize the previous word, but do not move point.
oovveerrwwrriittee--mmooddee
Toggle overwrite mode. With an explicit positive numeric argu-
ment, switches to overwrite mode. With an explicit non-positive
numeric argument, switches to insert mode. This command affects
only eemmaaccss mode; vvii mode does overwrite differently. Each call
to _r_e_a_d_l_i_n_e_(_) starts in insert mode.
In overwrite mode, characters bound to sseellff--iinnsseerrtt replace the
text at point rather than pushing the text to the right. Char-
acters bound to bbaacckkwwaarrdd--ddeelleettee--cchhaarr replace the character be-
fore point with a space. By default, this command is unbound,
but may be bound to the Insert key on some keyboards.
KKiilllliinngg aanndd YYaannkkiinngg
kkiillll--lliinnee ((CC--kk))
Kill the text from point to the end of the current line. With a
negative numeric argument, kill backward from the cursor to the
beginning of the line.
bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt))
Kill backward to the beginning of the current line. With a neg-
ative numeric argument, kill forward from the cursor to the end
of the line.
uunniixx--lliinnee--ddiissccaarrdd ((CC--uu))
Kill backward from point to the beginning of the line, saving
the killed text on the kill-ring.
kkiillll--wwhhoollee--lliinnee
Kill all characters on the current line, no matter where point
is.
kkiillll--wwoorrdd ((MM--dd))
Kill from point to the end of the current word, or if between
words, to the end of the next word. Word boundaries are the
same as those used by ffoorrwwaarrdd--wwoorrdd.
bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt))
Kill the word behind point. Word boundaries are the same as
those used by bbaacckkwwaarrdd--wwoorrdd.
sshheellll--kkiillll--wwoorrdd ((MM--CC--dd))
Kill from point to the end of the current word, or if between
words, to the end of the next word. Word boundaries are the
same as those used by sshheellll--ffoorrwwaarrdd--wwoorrdd.
sshheellll--bbaacckkwwaarrdd--kkiillll--wwoorrdd
Kill the word behind point. Word boundaries are the same as
those used by sshheellll--bbaacckkwwaarrdd--wwoorrdd.
uunniixx--wwoorrdd--rruubboouutt ((CC--ww))
Kill the word behind point, using white space as a word bound-
ary, saving the killed text on the kill-ring.
uunniixx--ffiilleennaammee--rruubboouutt
Kill the word behind point, using white space and the slash
character as the word boundaries, saving the killed text on the
kill-ring.
ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\))
Delete all spaces and tabs around point.
kkiillll--rreeggiioonn
Kill the text in the current region.
ccooppyy--rreeggiioonn--aass--kkiillll
Copy the text in the region to the kill buffer, so it can be
yanked immediately.
ccooppyy--bbaacckkwwaarrdd--wwoorrdd
Copy the word before point to the kill buffer. The word bound-
aries are the same as bbaacckkwwaarrdd--wwoorrdd.
ccooppyy--ffoorrwwaarrdd--wwoorrdd
Copy the word following point to the kill buffer. The word
boundaries are the same as ffoorrwwaarrdd--wwoorrdd.
yyaannkk ((CC--yy))
Yank the top of the kill ring into the buffer at point.
yyaannkk--ppoopp ((MM--yy))
Rotate the kill ring, and yank the new top. Only works follow-
ing yyaannkk or yyaannkk--ppoopp.
NNuummeerriicc AArrgguummeennttss
ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ...,, MM----))
Add this digit to the argument already accumulating, or start a
new argument. M-- starts a negative argument.
uunniivveerrssaall--aarrgguummeenntt
This is another way to specify an argument. If this command is
followed by one or more digits, optionally with a leading minus
sign, those digits define the argument. If the command is fol-
lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the nu-
meric argument, but is otherwise ignored. As a special case, if
this command is immediately followed by a character that is nei-
ther a digit nor minus sign, the argument count for the next
command is multiplied by four. The argument count is initially
one, so executing this function the first time makes the argu-
ment count four, a second time makes the argument count sixteen,
and so on.
CCoommpplleettiinngg
ccoommpplleettee ((TTAABB))
Attempt to perform completion on the text before point. BBaasshh
attempts completion by first checking for any programmable com-
pletions for the command word (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn be-
low), otherwise treating the text as a variable (if the text be-
gins with $$), username (if the text begins with ~~), hostname (if
the text begins with @@), or command (including aliases, func-
tions, and builtins) in turn. If none of these produces a
match, it falls back to filename completion.
ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??))
List the possible completions of the text before point. When
displaying completions, rreeaaddlliinnee sets the number of columns used
for display to the value of ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh, the value
of the shell variable CCOOLLUUMMNNSS, or the screen width, in that or-
der.
iinnsseerrtt--ccoommpplleettiioonnss ((MM--**))
Insert all completions of the text before point that would have
been generated by ppoossssiibbllee--ccoommpplleettiioonnss, separated by a space.
mmeennuu--ccoommpplleettee
Similar to ccoommpplleettee, but replaces the word to be completed with
a single match from the list of possible completions. Repeat-
edly executing mmeennuu--ccoommpplleettee steps through the list of possible
completions, inserting each match in turn. At the end of the
list of completions, mmeennuu--ccoommpplleettee rings the bell (subject to
the setting of bbeellll--ssttyyllee) and restores the original text. An
argument of _n moves _n positions forward in the list of matches;
a negative argument moves backward through the list. This com-
mand is intended to be bound to TTAABB, but is unbound by default.
mmeennuu--ccoommpplleettee--bbaacckkwwaarrdd
Identical to mmeennuu--ccoommpplleettee, but moves backward through the list
of possible completions, as if mmeennuu--ccoommpplleettee had been given a
negative argument. This command is unbound by default.
eexxppoorrtt--ccoommpplleettiioonnss
Perform completion on the word before point as described above
and write the list of possible completions to rreeaaddlliinnee's output
stream using the following format, writing information on sepa-
rate lines:
+o the number of matches _N;
+o the word being completed;
+o _S:_E, where _S and _E are the start and end offsets of the
word in the rreeaaddlliinnee line buffer; then
+o each match, one per line
If there are no matches, the first line will be "0", and this
command does not print any output after the _S:_E. If there is
only a single match, this prints a single line containing it.
If there is more than one match, this prints the common prefix
of the matches, which may be empty, on the first line after the
_S:_E, then the matches on subsequent lines. In this case, _N will
include the first line with the common prefix.
The user or application should be able to accommodate the possi-
bility of a blank line. The intent is that the user or applica-
tion reads _N lines after the line containing _S:_E to obtain the
match list. This command is unbound by default.
ddeelleettee--cchhaarr--oorr--lliisstt
Deletes the character under the cursor if not at the beginning
or end of the line (like ddeelleettee--cchhaarr). At the end of the line,
it behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. This command is
unbound by default.
ccoommpplleettee--ffiilleennaammee ((MM--//))
Attempt filename completion on the text before point.
ppoossssiibbllee--ffiilleennaammee--ccoommpplleettiioonnss ((CC--xx //))
List the possible completions of the text before point, treating
it as a filename.
ccoommpplleettee--uusseerrnnaammee ((MM--~~))
Attempt completion on the text before point, treating it as a
username.
ppoossssiibbllee--uusseerrnnaammee--ccoommpplleettiioonnss ((CC--xx ~~))
List the possible completions of the text before point, treating
it as a username.
ccoommpplleettee--vvaarriiaabbllee ((MM--$$))
Attempt completion on the text before point, treating it as a
shell variable.
ppoossssiibbllee--vvaarriiaabbllee--ccoommpplleettiioonnss ((CC--xx $$))
List the possible completions of the text before point, treating
it as a shell variable.
ccoommpplleettee--hhoossttnnaammee ((MM--@@))
Attempt completion on the text before point, treating it as a
hostname.
ppoossssiibbllee--hhoossttnnaammee--ccoommpplleettiioonnss ((CC--xx @@))
List the possible completions of the text before point, treating
it as a hostname.
ccoommpplleettee--ccoommmmaanndd ((MM--!!))
Attempt completion on the text before point, treating it as a
command name. Command completion attempts to match the text
against aliases, reserved words, shell functions, shell
builtins, and finally executable filenames, in that order.
ppoossssiibbllee--ccoommmmaanndd--ccoommpplleettiioonnss ((CC--xx !!))
List the possible completions of the text before point, treating
it as a command name.
ddyynnaammiicc--ccoommpplleettee--hhiissttoorryy ((MM--TTAABB))
Attempt completion on the text before point, comparing the text
against history list entries for possible completion matches.
ddaabbbbrreevv--eexxppaanndd
Attempt menu completion on the text before point, comparing the
text against lines from the history list for possible completion
matches.
ccoommpplleettee--iinnttoo--bbrraacceess ((MM--{{))
Perform filename completion and insert the list of possible com-
pletions enclosed within braces so the list is available to the
shell (see BBrraaccee EExxppaannssiioonn above).
KKeeyybbooaarrdd MMaaccrrooss
ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (())
Begin saving the characters typed into the current keyboard
macro.
eenndd--kkbbdd--mmaaccrroo ((CC--xx ))))
Stop saving the characters typed into the current keyboard macro
and store the definition.
ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee))
Re-execute the last keyboard macro defined, by making the char-
acters in the macro appear as if typed at the keyboard.
pprriinntt--llaasstt--kkbbdd--mmaaccrroo (())
Print the last keyboard macro defined in a format suitable for
the _i_n_p_u_t_r_c file.
MMiisscceellllaanneeoouuss
rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr))
Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any
bindings or variable assignments found there.
aabboorrtt ((CC--gg))
Abort the current editing command and ring the terminal's bell
(subject to the setting of bbeellll--ssttyyllee).
ddoo--lloowweerrccaassee--vveerrssiioonn ((MM--AA,, MM--BB,, MM--_x,, ...))
If the metafied character _x is uppercase, run the command that
is bound to the corresponding metafied lowercase character. The
behavior is undefined if _x is already lowercase.
pprreeffiixx--mmeettaa ((EESSCC))
Metafy the next character typed. EESSCC ff is equivalent to MMeettaa--ff.
uunnddoo ((CC--__,, CC--xx CC--uu))
Incremental undo, separately remembered for each line.
rreevveerrtt--lliinnee ((MM--rr))
Undo all changes made to this line. This is like executing the
uunnddoo command enough times to return the line to its initial
state.
ttiillddee--eexxppaanndd ((MM--&&))
Perform tilde expansion on the current word.
sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>))
Set the mark to the point. If a numeric argument is supplied,
set the mark to that position.
eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx))
Swap the point with the mark. Set the current cursor position
to the saved position, then set the mark to the old cursor posi-
tion.
cchhaarraacctteerr--sseeaarrcchh ((CC--]]))
Read a character and move point to the next occurrence of that
character. A negative argument searches for previous occur-
rences.
cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]]))
Read a character and move point to the previous occurrence of
that character. A negative argument searches for subsequent oc-
currences.
sskkiipp--ccssii--sseeqquueennccee
Read enough characters to consume a multi-key sequence such as
those defined for keys like Home and End. CSI sequences begin
with a Control Sequence Indicator (CSI), usually _E_S_C _[. If this
sequence is bound to "\e[", keys producing CSI sequences have no
effect unless explicitly bound to a rreeaaddlliinnee command, instead of
inserting stray characters into the editing buffer. This is un-
bound by default, but usually bound to _E_S_C _[.
iinnsseerrtt--ccoommmmeenntt ((MM--##))
Without a numeric argument, insert the value of the rreeaaddlliinnee
ccoommmmeenntt--bbeeggiinn variable at the beginning of the current line. If
a numeric argument is supplied, this command acts as a toggle:
if the characters at the beginning of the line do not match the
value of ccoommmmeenntt--bbeeggiinn, insert the value; otherwise delete the
characters in ccoommmmeenntt--bbeeggiinn from the beginning of the line. In
either case, the line is accepted as if a newline had been
typed. The default value of ccoommmmeenntt--bbeeggiinn causes this command
to make the current line a shell comment. If a numeric argument
causes the comment character to be removed, the line will be ex-
ecuted by the shell.
ssppeellll--ccoorrrreecctt--wwoorrdd ((CC--xx ss))
Perform spelling correction on the current word, treating it as
a directory or filename, in the same way as the ccddssppeellll shell
option. Word boundaries are the same as those used by
sshheellll--ffoorrwwaarrdd--wwoorrdd.
gglloobb--ccoommpplleettee--wwoorrdd ((MM--gg))
Treat the word before point as a pattern for pathname expansion,
with an asterisk implicitly appended, then use the pattern to
generate a list of matching file names for possible completions.
gglloobb--eexxppaanndd--wwoorrdd ((CC--xx **))
Treat the word before point as a pattern for pathname expansion,
and insert the list of matching file names, replacing the word.
If a numeric argument is supplied, append a ** before pathname
expansion.
gglloobb--lliisstt--eexxppaannssiioonnss ((CC--xx gg))
Display the list of expansions that would have been generated by
gglloobb--eexxppaanndd--wwoorrdd and redisplay the line. If a numeric argument
is supplied, append a ** before pathname expansion.
dduummpp--ffuunnccttiioonnss
Print all of the functions and their key bindings to the rreeaadd--
lliinnee output stream. If a numeric argument is supplied, the out-
put is formatted in such a way that it can be made part of an
_i_n_p_u_t_r_c file.
dduummpp--vvaarriiaabblleess
Print all of the settable rreeaaddlliinnee variables and their values to
the rreeaaddlliinnee output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an _i_n_p_u_t_r_c file.
dduummpp--mmaaccrrooss
Print all of the rreeaaddlliinnee key sequences bound to macros and the
strings they output to the rreeaaddlliinnee output stream. If a numeric
argument is supplied, the output is formatted in such a way that
it can be made part of an _i_n_p_u_t_r_c file.
eexxeeccuuttee--nnaammeedd--ccoommmmaanndd ((MM--xx))
Read a bindable rreeaaddlliinnee command name from the input and execute
the function to which it's bound, as if the key sequence to
which it was bound appeared in the input. If this function is
supplied with a numeric argument, it passes that argument to the
function it executes.
ddiissppllaayy--sshheellll--vveerrssiioonn ((CC--xx CC--vv))
Display version information about the current instance of bbaasshh.
PPrrooggrraammmmaabbllee CCoommpplleettiioonn
When a user attempts word completion for a command or an argument to a
command for which a completion specification (a _c_o_m_p_s_p_e_c) has been de-
fined using the ccoommpplleettee builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below),
rreeaaddlliinnee invokes the programmable completion facilities.
First, bbaasshh identifies the command name. If a compspec has been de-
fined for that command, the compspec is used to generate the list of
possible completions for the word. If the command word is the empty
string (completion attempted at the beginning of an empty line), bbaasshh
uses any compspec defined with the --EE option to ccoommpplleettee. The --II op-
tion to ccoommpplleettee indicates that the command word is the first non-as-
signment word on the line, or after a command delimiter such as ;; or ||.
This usually indicates command name completion.
If the command word is a full pathname, bbaasshh searches for a compspec
for the full pathname first. If there is no compspec for the full
pathname, bbaasshh attempts to find a compspec for the portion following
the final slash. If those searches do not result in a compspec, or if
there is no compspec for the command word, bbaasshh uses any compspec de-
fined with the --DD option to ccoommpplleettee as the default. If there is no
default compspec, bbaasshh performs alias expansion on the command word as
a final resort, and attempts to find a compspec for the command word
resulting from any successful expansion.
If a compspec is not found, bbaasshh performs its default completion as de-
scribed above under CCoommpplleettiinngg. Otherwise, once a compspec has been
found, bbaasshh uses it to generate the list of matching words.
First, bbaasshh performs the _a_c_t_i_o_n_s specified by the compspec. This only
returns matches which are prefixes of the word being completed. When
the --ff or --dd option is used for filename or directory name completion,
bbaasshh uses the shell variable FFIIGGNNOORREE to filter the matches.
Next, programmable completion generates matches specified by a pathname
expansion pattern supplied as an argument to the --GG option. The words
generated by the pattern need not match the word being completed. BBaasshh
uses the FFIIGGNNOORREE variable to filter the matches, but does not use the
GGLLOOBBIIGGNNOORREE shell variable.
Next, completion considers the string specified as the argument to the
--WW option. The string is first split using the characters in the IIFFSS
special variable as delimiters. This honors shell quoting within the
string, in order to provide a mechanism for the words to contain shell
metacharacters or characters in the value of IIFFSS. Each word is then
expanded using brace expansion, tilde expansion, parameter and variable
expansion, command substitution, and arithmetic expansion, as described
above under EEXXPPAANNSSIIOONN. The results are split using the rules described
above under WWoorrdd SSpplliittttiinngg. The results of the expansion are prefix-
matched against the word being completed, and the matching words become
possible completions.
After these matches have been generated, bbaasshh executes any shell func-
tion or command specified with the --FF and --CC options. When the command
or function is invoked, bbaasshh assigns values to the CCOOMMPP__LLIINNEE,
CCOOMMPP__PPOOIINNTT, CCOOMMPP__KKEEYY, and CCOOMMPP__TTYYPPEE variables as described above under
SShheellll VVaarriiaabblleess. If a shell function is being invoked, bbaasshh also sets
the CCOOMMPP__WWOORRDDSS and CCOOMMPP__CCWWOORRDD variables. When the function or command
is invoked, the first argument ($$11) is the name of the command whose
arguments are being completed, the second argument ($$22) is the word be-
ing completed, and the third argument ($$33) is the word preceding the
word being completed on the current command line. There is no filter-
ing of the generated completions against the word being completed; the
function or command has complete freedom in generating the matches and
they do not need to match a prefix of the word.
Any function specified with --FF is invoked first. The function may use
any of the shell facilities, including the ccoommppggeenn and ccoommppoopptt builtins
described below, to generate the matches. It must put the possible
completions in the CCOOMMPPRREEPPLLYY array variable, one per array element.
Next, any command specified with the --CC option is invoked in an envi-
ronment equivalent to command substitution. It should print a list of
completions, one per line, to the standard output. Backslash will es-
cape a newline, if necessary. These are added to the set of possible
completions.
After generating all of the possible completions, bbaasshh applies any fil-
ter specified with the --XX option to the completions in the list. The
filter is a pattern as used for pathname expansion; a && in the pattern
is replaced with the text of the word being completed. A literal && may
be escaped with a backslash; the backslash is removed before attempting
a match. Any completion that matches the pattern is removed from the
list. A leading !! negates the pattern; in this case bbaasshh removes any
completion that does not match the pattern. If the nnooccaasseemmaattcchh shell
option is enabled, bbaasshh performs the match without regard to the case
of alphabetic characters.
Finally, programmable completion adds any prefix and suffix specified
with the --PP and --SS options, respectively, to each completion, and re-
turns the result to rreeaaddlliinnee as the list of possible completions.
If the previously-applied actions do not generate any matches, and the
--oo ddiirrnnaammeess option was supplied to ccoommpplleettee when the compspec was de-
fined, bbaasshh attempts directory name completion.
If the --oo pplluussddiirrss option was supplied to ccoommpplleettee when the compspec
was defined, bbaasshh attempts directory name completion and adds any
matches to the set of possible completions.
By default, if a compspec is found, whatever it generates is returned
to the completion code as the full set of possible completions. The
default bbaasshh completions and the rreeaaddlliinnee default of filename comple-
tion are disabled. If the --oo bbaasshhddeeffaauulltt option was supplied to ccoomm--
pplleettee when the compspec was defined, and the compspec generates no
matches, bbaasshh attempts its default completions. If the compspec and,
if attempted, the default bbaasshh completions generate no matches, and the
--oo ddeeffaauulltt option was supplied to ccoommpplleettee when the compspec was de-
fined, programmable completion performs rreeaaddlliinnee's default completion.
The options supplied to ccoommpplleettee and ccoommppoopptt can control how rreeaaddlliinnee
treats the completions. For instance, the _-_o _f_u_l_l_q_u_o_t_e option tells
rreeaaddlliinnee to quote the matches as if they were filenames. See the de-
scription of ccoommpplleettee below for details.
When a compspec indicates that it wants directory name completion, the
programmable completion functions force rreeaaddlliinnee to append a slash to
completed names which are symbolic links to directories, subject to the
value of the mmaarrkk--ddiirreeccttoorriieess rreeaaddlliinnee variable, regardless of the set-
ting of the mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess rreeaaddlliinnee variable.
There is some support for dynamically modifying completions. This is
most useful when used in combination with a default completion speci-
fied with ccoommpplleettee --DD. It's possible for shell functions executed as
completion functions to indicate that completion should be retried by
returning an exit status of 124. If a shell function returns 124, and
changes the compspec associated with the command on which completion is
being attempted (supplied as the first argument when the function is
executed), programmable completion restarts from the beginning, with an
attempt to find a new compspec for that command. This can be used to
build a set of completions dynamically as completion is attempted,
rather than loading them all at once.
For instance, assuming that there is a library of compspecs, each kept
in a file corresponding to the name of the command, the following de-
fault completion function would load completions dynamically:
_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" \
>/dev/null 2>&1 && return 124
}
complete -D -F _completion_loader \
-o bashdefault -o default
HHIISSTTOORRYY
When the --oo hhiissttoorryy option to the sseett builtin is enabled, the shell
provides access to the _c_o_m_m_a_n_d _h_i_s_t_o_r_y, the list of commands previously
typed. The value of the HHIISSTTSSIIZZEE variable is used as the number of
commands to save in a history list: the shell saves the text of the
last HHIISSTTSSIIZZEE commands (default 500). The shell stores each command in
the history list prior to parameter and variable expansion (see EEXXPPAANN--
SSIIOONN above) but after history expansion is performed, subject to the
values of the shell variables HHIISSTTIIGGNNOORREE and HHIISSTTCCOONNTTRROOLL.
On startup, bbaasshh initializes the history list by reading history en-
tries from the file named by the HHIISSTTFFIILLEE variable (default
_~_/_._b_a_s_h___h_i_s_t_o_r_y). That file is referred to as the _h_i_s_t_o_r_y _f_i_l_e. The
history file is truncated, if necessary, to contain no more than the
number of history entries specified by the value of the HHIISSTTFFIILLEESSIIZZEE
variable. If HHIISSTTFFIILLEESSIIZZEE is unset, or set to null, a non-numeric
value, or a numeric value less than zero, the history file is not trun-
cated.
When the history file is read, lines beginning with the history comment
character followed immediately by a digit are interpreted as timestamps
for the following history line. These timestamps are optionally dis-
played depending on the value of the HHIISSTTTTIIMMEEFFOORRMMAATT variable. When
present, history timestamps delimit history entries, making multi-line
entries possible.
When a shell with history enabled exits, bbaasshh copies the last $$HHIISSTTSSIIZZEE
entries from the history list to $$HHIISSTTFFIILLEE. If the hhiissttaappppeenndd shell
option is enabled (see the description of sshhoopptt under SSHHEELLLL BBUUIILLTTIINN
CCOOMMMMAANNDDSS below), bbaasshh appends the entries to the history file, other-
wise it overwrites the history file. If HHIISSTTFFIILLEE is unset or null, or
if the history file is unwritable, the history is not saved. After
saving the history, bbaasshh truncates the history file to contain no more
than HHIISSTTFFIILLEESSIIZZEE lines as described above.
If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the shell writes the timestamp
information associated with each history entry to the history file,
marked with the history comment character, so timestamps are preserved
across shell sessions. This uses the history comment character to dis-
tinguish timestamps from other history lines. As above, when using
HHIISSTTTTIIMMEEFFOORRMMAATT, the timestamps delimit multi-line history entries.
The ffcc builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) will list or
edit and re-execute a portion of the history list. The hhiissttoorryy builtin
can display or modify the history list and manipulate the history file.
When using command-line editing, search commands are available in each
editing mode that provide access to the history list.
The shell allows control over which commands are saved on the history
list. The HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables are used to save only a
subset of the commands entered. If the ccmmddhhiisstt shell option is en-
abled, the shell attempts to save each line of a multi-line command in
the same history entry, adding semicolons where necessary to preserve
syntactic correctness. The lliitthhiisstt shell option modifies ccmmddhhiisstt by
saving the command with embedded newlines instead of semicolons. See
the description of the sshhoopptt builtin below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
for information on setting and unsetting shell options.
HHIISSTTOORRYY EEXXPPAANNSSIIOONN
The shell supports a history expansion feature that is similar to the
history expansion in ccsshh. This section describes what syntax features
are available.
History expansion is enabled by default for interactive shells, and can
be disabled using the ++HH option to the sseett builtin command (see SSHHEELLLL
BBUUIILLTTIINN CCOOMMMMAANNDDSS below). Non-interactive shells do not perform history
expansion by default, but it can be enabled with "set -H".
History expansions introduce words from the history list into the input
stream, making it easy to repeat commands, insert the arguments to a
previous command into the current input line, or fix errors in previous
commands quickly.
History expansion is performed immediately after a complete line is
read, before the shell breaks it into words, and is performed on each
line individually. The shell attempts to inform the history expansion
functions about quoting still in effect from previous lines.
It takes place in two parts. The first is to determine which history
list entry to use during substitution. The second is to select por-
tions of that entry to include into the current one.
The entry selected from the history is the _e_v_e_n_t, and the portions of
that entry that are acted upon are _w_o_r_d_s. Various _m_o_d_i_f_i_e_r_s are avail-
able to manipulate the selected words. The entry is split into words
in the same fashion as when reading input, so that several _m_e_t_a_c_h_a_r_a_c_-
_t_e_r-separated words surrounded by quotes are considered one word. The
_e_v_e_n_t _d_e_s_i_g_n_a_t_o_r selects the event, the optional _w_o_r_d _d_e_s_i_g_n_a_t_o_r se-
lects words from the event, and various optional _m_o_d_i_f_i_e_r_s are avail-
able to manipulate the selected words.
History expansions are introduced by the appearance of the history ex-
pansion character, which is !! by default. History expansions may ap-
pear anywhere in the input, but do not nest.
Only backslash (\\) and single quotes can quote the history expansion
character, but the history expansion character is also treated as
quoted if it immediately precedes the closing double quote in a double-
quoted string.
Several characters inhibit history expansion if found immediately fol-
lowing the history expansion character, even if it is unquoted: space,
tab, newline, carriage return, ==, and the other shell metacharacters
defined above.
There is a special abbreviation for substitution, active when the _q_u_i_c_k
_s_u_b_s_t_i_t_u_t_i_o_n character (described above under hhiissttcchhaarrss) is the first
character on the line. It selects the previous history list entry, us-
ing an event designator equivalent to !!!!, and substitutes one string
for another in that entry. It is described below under EEvveenntt DDeessiiggnnaa--
ttoorrss. This is the only history expansion that does not begin with the
history expansion character.
Several shell options settable with the sshhoopptt builtin will modify his-
tory expansion behavior (see the description of the sshhoopptt builtin be-
low).and If the hhiissttvveerriiffyy shell option is enabled, and rreeaaddlliinnee is be-
ing used, history substitutions are not immediately passed to the shell
parser. Instead, the expanded line is reloaded into the rreeaaddlliinnee edit-
ing buffer for further modification. If rreeaaddlliinnee is being used, and
the hhiissttrreeeeddiitt shell option is enabled, a failed history substitution
is reloaded into the rreeaaddlliinnee editing buffer for correction.
The --pp option to the hhiissttoorryy builtin command shows what a history ex-
pansion will do before using it. The --ss option to the hhiissttoorryy builtin
will add commands to the end of the history list without actually exe-
cuting them, so that they are available for subsequent recall.
The shell allows control of the various characters used by the history
expansion mechanism (see the description of hhiissttcchhaarrss above under SShheellll
VVaarriiaabblleess). The shell uses the history comment character to mark his-
tory timestamps when writing the history file.
EEvveenntt DDeessiiggnnaattoorrss
An event designator is a reference to an entry in the history list.
The event designator consists of the portion of the word beginning with
the history expansion character and ending with the word designator if
present, or the end of the word. Unless the reference is absolute,
events are relative to the current position in the history list.
!! Start a history substitution, except when followed by a bbllaannkk,
newline, carriage return, =, or, when the eexxttgglloobb shell option
is enabled using the sshhoopptt builtin, (.
!!_n Refer to history list entry _n.
!!--_n Refer to the current entry minus _n.
!!!! Refer to the previous entry. This is a synonym for "!-1".
!!_s_t_r_i_n_g
Refer to the most recent command preceding the current position
in the history list starting with _s_t_r_i_n_g.
!!??_s_t_r_i_n_g[[??]]
Refer to the most recent command preceding the current position
in the history list containing _s_t_r_i_n_g. The trailing ?? may be
omitted if _s_t_r_i_n_g is followed immediately by a newline. If
_s_t_r_i_n_g is missing, this uses the string from the most recent
search; it is an error if there is no previous search string.
^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^
Quick substitution. Repeat the previous command, replacing
_s_t_r_i_n_g_1 with _s_t_r_i_n_g_2. Equivalent to "!!:s^_s_t_r_i_n_g_1^_s_t_r_i_n_g_2^"
(see MMooddiiffiieerrss below).
!!## The entire command line typed so far.
WWoorrdd DDeessiiggnnaattoorrss
Word designators are used to select desired words from the event. They
are optional; if the word designator isn't supplied, the history expan-
sion uses the entire event. A :: separates the event specification from
the word designator. It may be omitted if the word designator begins
with a ^^, $$, **, --, or %%. Words are numbered from the beginning of the
line, with the first word being denoted by 0 (zero). Words are in-
serted into the current line separated by single spaces.
00 ((zzeerroo))
The zeroth word. For the shell, this is the command word.
_n The _nth word.
^^ The first argument: word 1.
$$ The last word. This is usually the last argument, but will ex-
pand to the zeroth word if there is only one word in the line.
%% The first word matched by the most recent "?_s_t_r_i_n_g?" search, if
the search string begins with a character that is part of a
word. By default, searches begin at the end of each line and
proceed to the beginning, so the first word matched is the one
closest to the end of the line.
_x--_y A range of words; "-_y" abbreviates "0-_y".
** All of the words but the zeroth. This is a synonym for "_1_-_$".
It is not an error to use ** if there is just one word in the
event; it expands to the empty string in that case.
xx** Abbreviates _x_-_$.
xx-- Abbreviates _x_-_$ like xx**, but omits the last word. If xx is miss-
ing, it defaults to 0.
If a word designator is supplied without an event specification, the
previous command is used as the event, equivalent to !!!!.
MMooddiiffiieerrss
After the optional word designator, the expansion may include a se-
quence of one or more of the following modifiers, each preceded by a
":". These modify, or edit, the word or words selected from the his-
tory event.
hh Remove a trailing pathname component, leaving only the head.
tt Remove all leading pathname components, leaving the tail.
rr Remove a trailing suffix of the form _._x_x_x, leaving the basename.
ee Remove all but the trailing suffix.
pp Print the new command but do not execute it.
qq Quote the substituted words, escaping further substitutions.
xx Quote the substituted words as with qq, but break into words at
bbllaannkkss and newlines. The qq and xx modifiers are mutually exclu-
sive; expansion uses the last one supplied.
ss//_o_l_d//_n_e_w//
Substitute _n_e_w for the first occurrence of _o_l_d in the event
line. Any character may be used as the delimiter in place of /.
The final delimiter is optional if it is the last character of
the event line. A single backslash quotes the delimiter in _o_l_d
and _n_e_w. If & appears in _n_e_w, it is replaced with _o_l_d. A sin-
gle backslash quotes the &. If _o_l_d is null, it is set to the
last _o_l_d substituted, or, if no previous history substitutions
took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search. If _n_e_w is
null, each matching _o_l_d is deleted.
&& Repeat the previous substitution.
gg Cause changes to be applied over the entire event line. This is
used in conjunction with "::ss" (e.g., "::ggss//_o_l_d//_n_e_w//") or "::&&".
If used with "::ss", any delimiter can be used in place of /, and
the final delimiter is optional if it is the last character of
the event line. An aa may be used as a synonym for gg.
GG Apply the following "ss" or "&&" modifier once to each word in the
event line.
SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
Unless otherwise noted, each builtin command documented in this section
as accepting options preceded by -- accepts ---- to signify the end of the
options. The ::, ttrruuee, ffaallssee, and tteesstt/[[ builtins do not accept options
and do not treat ---- specially. The eexxiitt, llooggoouutt, rreettuurrnn, bbrreeaakk, ccoonn--
ttiinnuuee, lleett, and sshhiifftt builtins accept and process arguments beginning
with -- without requiring ----. Other builtins that accept arguments but
are not specified as accepting options interpret arguments beginning
with -- as invalid options and require ---- to prevent this interpreta-
tion.
:: [_a_r_g_u_m_e_n_t_s]
No effect; the command does nothing beyond expanding _a_r_g_u_m_e_n_t_s
and performing any specified redirections. The return status is
zero.
.. [--pp _p_a_t_h] _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s]
ssoouurrccee [--pp _p_a_t_h] _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s]
The .. command (ssoouurrccee) reads and execute commands from _f_i_l_e_n_a_m_e
in the current shell environment and returns the exit status of
the last command executed from _f_i_l_e_n_a_m_e.
If _f_i_l_e_n_a_m_e does not contain a slash, .. searches for it. If the
--pp option is supplied, .. treats _p_a_t_h as a colon-separated list
of directories in which to find _f_i_l_e_n_a_m_e; otherwise, .. uses the
entries in PPAATTHH to find the directory containing _f_i_l_e_n_a_m_e.
_f_i_l_e_n_a_m_e does not need to be executable. When bbaasshh is not in
posix mode, it searches the current directory if _f_i_l_e_n_a_m_e is not
found in PPAATTHH, but does not search the current directory if --pp
is supplied. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin com-
mand is turned off, .. does not search PPAATTHH.
If any _a_r_g_u_m_e_n_t_s are supplied, they become the positional para-
meters when _f_i_l_e_n_a_m_e is executed. Otherwise the positional pa-
rameters are unchanged.
If the --TT option is enabled, .. inherits any trap on DDEEBBUUGG; if it
is not, any DDEEBBUUGG trap string is saved and restored around the
call to .., and .. unsets the DDEEBBUUGG trap while it executes. If --TT
is not set, and the sourced file changes the DDEEBBUUGG trap, the new
value persists after .. completes. The return status is the sta-
tus of the last command executed from _f_i_l_e_n_a_m_e (0 if no commands
are executed), and non-zero if _f_i_l_e_n_a_m_e is not found or cannot
be read.
aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
With no arguments or with the --pp option, aalliiaass prints the list
of aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output.
When arguments are supplied, define an alias for each _n_a_m_e whose
_v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word
to be checked for alias substitution when the alias is expanded
during command parsing. For each _n_a_m_e in the argument list for
which no _v_a_l_u_e is supplied, print the name and value of the
alias _n_a_m_e. aalliiaass returns true unless a _n_a_m_e is given (without
a corresponding =_v_a_l_u_e) for which no alias has been defined.
bbgg [_j_o_b_s_p_e_c ...]
Resume each suspended job _j_o_b_s_p_e_c in the background, as if it
had been started with &&. If _j_o_b_s_p_e_c is not present, the shell
uses its notion of the _c_u_r_r_e_n_t _j_o_b. bbgg _j_o_b_s_p_e_c returns 0 unless
run when job control is disabled or, when run with job control
enabled, any specified _j_o_b_s_p_e_c was not found or was started
without job control.
bbiinndd [--mm _k_e_y_m_a_p] [--llssvvSSVVXX]
bbiinndd [--mm _k_e_y_m_a_p] [--qq _f_u_n_c_t_i_o_n] [--uu _f_u_n_c_t_i_o_n] [--rr _k_e_y_s_e_q]
bbiinndd [--mm _k_e_y_m_a_p] --ff _f_i_l_e_n_a_m_e
bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q[:] _s_h_e_l_l_-_c_o_m_m_a_n_d
bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e
bbiinndd [--mm _k_e_y_m_a_p] --pp|--PP [_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d]
bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d
bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e
Display current rreeaaddlliinnee key and function bindings, bind a key
sequence to a rreeaaddlliinnee function or macro or to a shell command,
or set a rreeaaddlliinnee variable. Each non-option argument is a key
binding or command as it would appear in a rreeaaddlliinnee initializa-
tion file such as _._i_n_p_u_t_r_c, but each binding or command must be
passed as a separate argument; e.g., '"\C-x\C-r":
re-read-init-file'. In the following descriptions, output
available to be re-read is formatted as commands that would ap-
pear in a rreeaaddlliinnee initialization file or that would be supplied
as individual arguments to a bbiinndd command. Options, if sup-
plied, have the following meanings:
--mm _k_e_y_m_a_p
Use _k_e_y_m_a_p as the keymap to be affected by the subsequent
bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_-
_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d,
and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e
is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_-
_d_a_r_d.
--ll List the names of all rreeaaddlliinnee functions.
--pp Display rreeaaddlliinnee function names and bindings in such a
way that they can be used as an argument to a subsequent
bbiinndd command or in a rreeaaddlliinnee initialization file. If
arguments remain after option processing, bbiinndd treats
them as rreeaaddlliinnee command names and restricts output to
those names.
--PP List current rreeaaddlliinnee function names and bindings. If
arguments remain after option processing, bbiinndd treats
them as rreeaaddlliinnee command names and restricts output to
those names.
--ss Display rreeaaddlliinnee key sequences bound to macros and the
strings they output in such a way that they can be used
as an argument to a subsequent bbiinndd command or in a rreeaadd--
lliinnee initialization file.
--SS Display rreeaaddlliinnee key sequences bound to macros and the
strings they output.
--vv Display rreeaaddlliinnee variable names and values in such a way
that they can be used as an argument to a subsequent bbiinndd
command or in a rreeaaddlliinnee initialization file.
--VV List current rreeaaddlliinnee variable names and values.
--ff _f_i_l_e_n_a_m_e
Read key bindings from _f_i_l_e_n_a_m_e.
--qq _f_u_n_c_t_i_o_n
Display key sequences that invoke the named rreeaaddlliinnee
_f_u_n_c_t_i_o_n.
--uu _f_u_n_c_t_i_o_n
Unbind all key sequences bound to the named rreeaaddlliinnee
_f_u_n_c_t_i_o_n.
--rr _k_e_y_s_e_q
Remove any current binding for _k_e_y_s_e_q.
--xx _k_e_y_s_e_q[[:: ]]_s_h_e_l_l_-_c_o_m_m_a_n_d
Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is en-
tered. The separator between _k_e_y_s_e_q and _s_h_e_l_l_-_c_o_m_m_a_n_d is
either whitespace or a colon optionally followed by
whitespace. If the separator is whitespace, _s_h_e_l_l_-_c_o_m_-
_m_a_n_d must be enclosed in double quotes and rreeaaddlliinnee ex-
pands any of its special backslash-escapes in _s_h_e_l_l_-_c_o_m_-
_m_a_n_d before saving it. If the separator is a colon, any
enclosing double quotes are optional, and rreeaaddlliinnee does
not expand the command string before saving it. Since
the entire key binding expression must be a single argu-
ment, it should be enclosed in single quotes. When
_s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets the RREEAADD--
LLIINNEE__LLIINNEE variable to the contents of the rreeaaddlliinnee line
buffer and the RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK variables
to the current location of the insertion point and the
saved insertion point (the mark), respectively. The
shell assigns any numeric argument the user supplied to
the RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu-
ment, that variable is not set. If the executed command
changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD--
LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, those new values will be
reflected in the editing state.
--XX List all key sequences bound to shell commands and the
associated commands in a format that can be reused as an
argument to a subsequent bbiinndd command.
The return value is 0 unless an unrecognized option is supplied
or an error occurred.
bbrreeaakk [_n]
Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is
specified, bbrreeaakk exits _n enclosing loops. _n must be >= 1. If _n
is greater than the number of enclosing loops, all enclosing
loops are exited. The return value is 0 unless _n is not greater
than or equal to 1.
bbuuiillttiinn _s_h_e_l_l_-_b_u_i_l_t_i_n [_a_r_g_u_m_e_n_t_s]
Execute the specified shell builtin _s_h_e_l_l_-_b_u_i_l_t_i_n, passing it
_a_r_g_u_m_e_n_t_s, and return its exit status. This is useful when
defining a function whose name is the same as a shell builtin,
retaining the functionality of the builtin within the function.
The ccdd builtin is commonly redefined this way. The return sta-
tus is false if _s_h_e_l_l_-_b_u_i_l_t_i_n is not a shell builtin command.
ccaalllleerr [_e_x_p_r]
Returns the context of any active subroutine call (a shell func-
tion or a script executed with the .. or ssoouurrccee builtins).
Without _e_x_p_r, ccaalllleerr displays the line number and source file-
name of the current subroutine call. If a non-negative integer
is supplied as _e_x_p_r, ccaalllleerr displays the line number, subroutine
name, and source file corresponding to that position in the cur-
rent execution call stack. This extra information may be used,
for example, to print a stack trace. The current frame is frame
0.
The return value is 0 unless the shell is not executing a sub-
routine call or _e_x_p_r does not correspond to a valid position in
the call stack.
ccdd [--LL] [--@@] [_d_i_r]
ccdd --PP [--ee] [--@@] [_d_i_r]
Change the current directory to _d_i_r. if _d_i_r is not supplied,
the value of the HHOOMMEE shell variable is used as _d_i_r. The vari-
able CCDDPPAATTHH exists, and _d_i_r does not begin with a slash (/), ccdd
uses it as a search path: the shell searches each directory name
in CCDDPPAATTHH for _d_i_r. Alternative directory names in CCDDPPAATTHH are
separated by a colon (:). A null directory name in CCDDPPAATTHH is
the same as the current directory, i.e., ".".
The --PP option causes ccdd to use the physical directory structure
by resolving symbolic links while traversing _d_i_r and before pro-
cessing instances of _._. in _d_i_r (see also the --PP option to the
sseett builtin command).
The --LL option forces ccdd to follow symbolic links by resolving
the link after processing instances of _._. in _d_i_r. If _._. appears
in _d_i_r, ccdd processes it by removing the immediately previous
pathname component from _d_i_r, back to a slash or the beginning of
_d_i_r, and verifying that the portion of _d_i_r it has processed to
that point is still a valid directory name after removing the
pathname component. If it is not a valid directory name, ccdd re-
turns a non-zero status. If neither --LL nor --PP is supplied, ccdd
behaves as if --LL had been supplied.
If the --ee option is supplied with --PP, and ccdd cannot successfully
determine the current working directory after a successful di-
rectory change, it returns a non-zero status.
On systems that support it, the --@@ option presents the extended
attributes associated with a file as a directory.
An argument of -- is converted to $$OOLLDDPPWWDD before attempting the
directory change.
If ccdd uses a non-empty directory name from CCDDPPAATTHH, or if -- is
the first argument, and the directory change is successful, ccdd
writes the absolute pathname of the new working directory to the
standard output.
If the directory change is successful, ccdd sets the value of the
PPWWDD environment variable to the new directory name, and sets the
OOLLDDPPWWDD environment variable to the value of the current working
directory before the change.
The return value is true if the directory was successfully
changed; false otherwise.
ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...]
The ccoommmmaanndd builtin runs _c_o_m_m_a_n_d with _a_r_g_s suppressing the nor-
mal shell function lookup for _c_o_m_m_a_n_d. Only builtin commands or
commands found in the PPAATTHH named _c_o_m_m_a_n_d are executed. If the
--pp option is supplied, the search for _c_o_m_m_a_n_d is performed using
a default value for PPAATTHH that is guaranteed to find all of the
standard utilities.
If either the --VV or --vv option is supplied, ccoommmmaanndd prints a de-
scription of _c_o_m_m_a_n_d. The --vv option displays a single word in-
dicating the command or filename used to invoke _c_o_m_m_a_n_d; the --VV
option produces a more verbose description.
If the --VV or --vv option is supplied, the exit status is zero if
_c_o_m_m_a_n_d was found, and non-zero if not. If neither option is
supplied and an error occurred or _c_o_m_m_a_n_d cannot be found, the
exit status is 127. Otherwise, the exit status of the ccoommmmaanndd
builtin is the exit status of _c_o_m_m_a_n_d.
ccoommppggeenn [--VV _v_a_r_n_a_m_e] [_o_p_t_i_o_n] [_w_o_r_d]
Generate possible completion matches for _w_o_r_d according to the
_o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee
builtin with the exceptions of --pp, --rr, --DD, --EE, and --II, and write
the matches to the standard output.
If the --VV option is supplied, ccoommppggeenn stores the generated com-
pletions into the indexed array variable _v_a_r_n_a_m_e instead of
writing them to the standard output.
When using the --FF or --CC options, the various shell variables set
by the programmable completion facilities, while available, will
not have useful values.
The matches will be generated in the same way as if the program-
mable completion code had generated them directly from a comple-
tion specification with the same flags. If _w_o_r_d is specified,
only those completions matching _w_o_r_d will be displayed or
stored.
The return value is true unless an invalid option is supplied,
or no matches were generated.
ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n]
[--GG _g_l_o_b_p_a_t] [--WW _w_o_r_d_l_i_s_t] [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d]
[--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_f_i_x] _n_a_m_e [_n_a_m_e ...]
ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...]
Specify how arguments to each _n_a_m_e should be completed.
If the --pp option is supplied, or if no options or _n_a_m_es are sup-
plied, print existing completion specifications in a way that
allows them to be reused as input. The --rr option removes a com-
pletion specification for each _n_a_m_e, or, if no _n_a_m_es are sup-
plied, all completion specifications.
The --DD option indicates that other supplied options and actions
should apply to the "default" command completion; that is, com-
pletion attempted on a command for which no completion has pre-
viously been defined. The --EE option indicates that other sup-
plied options and actions should apply to "empty" command com-
pletion; that is, completion attempted on a blank line. The --II
option indicates that other supplied options and actions should
apply to completion on the initial non-assignment word on the
line, or after a command delimiter such as ;; or ||, which is usu-
ally command name completion. If multiple options are supplied,
the --DD option takes precedence over --EE, and both take precedence
over --II. If any of --DD, --EE, or --II are supplied, any other _n_a_m_e
arguments are ignored; these completions only apply to the case
specified by the option.
The process of applying these completion specifications when at-
tempting word completion is described above under PPrrooggrraammmmaabbllee
CCoommpplleettiioonn.
Other options, if specified, have the following meanings. The
arguments to the --GG, --WW, and --XX options (and, if necessary, the
--PP and --SS options) should be quoted to protect them from expan-
sion before the ccoommpplleettee builtin is invoked.
--oo _c_o_m_p_-_o_p_t_i_o_n
The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp-
spec's behavior beyond the simple generation of comple-
tions. _c_o_m_p_-_o_p_t_i_o_n may be one of:
bbaasshhddeeffaauulltt
Perform the rest of the default bbaasshh completions
if the compspec generates no matches.
ddeeffaauulltt Use rreeaaddlliinnee's default filename completion if
the compspec generates no matches.
ddiirrnnaammeess
Perform directory name completion if the comp-
spec generates no matches.
ffiilleennaammeess
Tell rreeaaddlliinnee that the compspec generates file-
names, so it can perform any filename-specific
processing (such as adding a slash to directory
names, quoting special characters, or suppress-
ing trailing spaces). This is intended to be
used with shell functions.
ffuullllqquuoottee
Tell rreeaaddlliinnee to quote all the completed words
even if they are not filenames.
nnooqquuoottee Tell rreeaaddlliinnee not to quote the completed words
if they are filenames (quoting filenames is the
default).
nnoossoorrtt Tell rreeaaddlliinnee not to sort the list of possible
completions alphabetically.
nnoossppaaccee Tell rreeaaddlliinnee not to append a space (the de-
fault) to words completed at the end of the
line.
pplluussddiirrss
After generating any matches defined by the
compspec, attempt directory name completion and
add any matches to the results of the other ac-
tions.
--AA _a_c_t_i_o_n
The _a_c_t_i_o_n may be one of the following to generate a
list of possible completions:
aalliiaass Alias names. May also be specified as --aa.
aarrrraayyvvaarr
Array variable names.
bbiinnddiinngg RReeaaddlliinnee key binding names.
bbuuiillttiinn Names of shell builtin commands. May also be
specified as --bb.
ccoommmmaanndd Command names. May also be specified as --cc.
ddiirreeccttoorryy
Directory names. May also be specified as --dd.
ddiissaabblleedd
Names of disabled shell builtins.
eennaabblleedd Names of enabled shell builtins.
eexxppoorrtt Names of exported shell variables. May also be
specified as --ee.
ffiillee File and directory names, similar to rreeaaddlliinnee's
filename completion. May also be specified as
--ff.
ffuunnccttiioonn
Names of shell functions.
ggrroouupp Group names. May also be specified as --gg.
hheellppttooppiicc
Help topics as accepted by the hheellpp builtin.
hhoossttnnaammee
Hostnames, as taken from the file specified by
the HHOOSSTTFFIILLEE shell variable.
jjoobb Job names, if job control is active. May also
be specified as --jj.
kkeeyywwoorrdd Shell reserved words. May also be specified as
--kk.
rruunnnniinngg Names of running jobs, if job control is active.
sseerrvviiccee Service names. May also be specified as --ss.
sseettoopptt Valid arguments for the --oo option to the sseett
builtin.
sshhoopptt Shell option names as accepted by the sshhoopptt
builtin.
ssiiggnnaall Signal names.
ssttooppppeedd Names of stopped jobs, if job control is active.
uusseerr User names. May also be specified as --uu.
vvaarriiaabbllee
Names of all shell variables. May also be spec-
ified as --vv.
--CC _c_o_m_m_a_n_d
_c_o_m_m_a_n_d is executed in a subshell environment, and its
output is used as the possible completions. Arguments
are passed as with the --FF option.
--FF _f_u_n_c_t_i_o_n
The shell function _f_u_n_c_t_i_o_n is executed in the current
shell environment. When the function is executed, the
first argument ($$11) is the name of the command whose ar-
guments are being completed, the second argument ($$22) is
the word being completed, and the third argument ($$33) is
the word preceding the word being completed on the cur-
rent command line. When _f_u_n_c_t_i_o_n finishes, programmable
completion retrieves the possible completions from the
value of the CCOOMMPPRREEPPLLYY array variable.
--GG _g_l_o_b_p_a_t
Expand the pathname expansion pattern _g_l_o_b_p_a_t to gener-
ate the possible completions.
--PP _p_r_e_f_i_x
Add _p_r_e_f_i_x to the beginning of each possible completion
after all other options have been applied.
--SS _s_u_f_f_i_x
Append _s_u_f_f_i_x to each possible completion after all
other options have been applied.
--WW _w_o_r_d_l_i_s_t
Split the _w_o_r_d_l_i_s_t using the characters in the IIFFSS spe-
cial variable as delimiters, and expand each resulting
word. Shell quoting is honored within _w_o_r_d_l_i_s_t, in or-
der to provide a mechanism for the words to contain
shell metacharacters or characters in the value of IIFFSS.
The possible completions are the members of the resul-
tant list which match a prefix of the word being com-
pleted.
--XX _f_i_l_t_e_r_p_a_t
_f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion.
It is applied to the list of possible completions gener-
ated by the preceding options and arguments, and each
completion matching _f_i_l_t_e_r_p_a_t is removed from the list.
A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this
case, any completion not matching _f_i_l_t_e_r_p_a_t is removed.
The return value is true unless an invalid option is supplied,
an option other than --pp, --rr, --DD, --EE, or --II is supplied without a
_n_a_m_e argument, an attempt is made to remove a completion speci-
fication for a _n_a_m_e for which no specification exists, or an er-
ror occurs adding a completion specification.
ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e]
Modify completion options for each _n_a_m_e according to the _o_p_-
_t_i_o_ns, or for the currently-executing completion if no _n_a_m_es are
supplied. If no _o_p_t_i_o_ns are supplied, display the completion
options for each _n_a_m_e or the current completion. The possible
values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de-
scribed above.
The --DD option indicates that other supplied options should apply
to the "default" command completion; the --EE option indicates
that other supplied options should apply to "empty" command com-
pletion; and the --II option indicates that other supplied options
should apply to completion on the initial word on the line.
These are determined in the same way as the ccoommpplleettee builtin.
If multiple options are supplied, the --DD option takes precedence
over --EE, and both take precedence over --II.
The return value is true unless an invalid option is supplied,
an attempt is made to modify the options for a _n_a_m_e for which no
completion specification exists, or an output error occurs.
ccoonnttiinnuuee [_n]
ccoonnttiinnuuee resumes the next iteration of the enclosing ffoorr, wwhhiillee,
uunnttiill, or sseelleecctt loop. If _n is specified, bbaasshh resumes the _nth
enclosing loop. _n must be >= 1. If _n is greater than the num-
ber of enclosing loops, the shell resumes the last enclosing
loop (the "top-level" loop). The return value is 0 unless _n is
not greater than or equal to 1.
ddeeccllaarree [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
Declare variables and/or give them attributes. If no _n_a_m_es are
given then display the values of variables or functions. The --pp
option will display the attributes and values of each _n_a_m_e.
When --pp is used with _n_a_m_e arguments, additional options, other
than --ff and --FF, are ignored.
When --pp is supplied without _n_a_m_e arguments, ddeeccllaarree will display
the attributes and values of all variables having the attributes
specified by the additional options. If no other options are
supplied with --pp, ddeeccllaarree will display the attributes and values
of all shell variables. The --ff option restricts the display to
shell functions.
The --FF option inhibits the display of function definitions; only
the function name and attributes are printed. If the eexxttddeebbuugg
shell option is enabled using sshhoopptt, the source file name and
line number where each _n_a_m_e is defined are displayed as well.
The --FF option implies --ff.
The --gg option forces variables to be created or modified at the
global scope, even when ddeeccllaarree is executed in a shell function.
It is ignored when ddeeccllaarree is not executed in a shell function.
The --II option causes local variables to inherit the attributes
(except the _n_a_m_e_r_e_f attribute) and value of any existing vari-
able with the same _n_a_m_e at a surrounding scope. If there is no
existing variable, the local variable is initially unset.
The following options can be used to restrict output to vari-
ables with the specified attribute or to give variables attrib-
utes:
--aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss
above).
--AA Each _n_a_m_e is an associative array variable (see AArrrraayyss
above).
--ff Each _n_a_m_e refers to a shell function.
--ii The variable is treated as an integer; arithmetic evalua-
tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when
the variable is assigned a value.
--ll When the variable is assigned a value, all upper-case
characters are converted to lower-case. The upper-case
attribute is disabled.
--nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name
reference to another variable. That other variable is
defined by the value of _n_a_m_e. All references, assign-
ments, and attribute modifications to _n_a_m_e, except those
using or changing the --nn attribute itself, are performed
on the variable referenced by _n_a_m_e's value. The nameref
attribute cannot be applied to array variables.
--rr Make _n_a_m_es readonly. These names cannot then be assigned
values by subsequent assignment statements or unset.
--tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions in-
herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell.
The trace attribute has no special meaning for variables.
--uu When the variable is assigned a value, all lower-case
characters are converted to upper-case. The lower-case
attribute is disabled.
--xx Mark each _n_a_m_e for export to subsequent commands via the
environment.
Using "+" instead of "-" turns off the specified attribute in-
stead, with the exceptions that ++aa and ++AA may not be used to de-
stroy array variables and ++rr will not remove the readonly at-
tribute.
When used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e lo-
cal, as with the llooccaall command, unless the --gg option is sup-
plied. If a variable name is followed by =_v_a_l_u_e, the value of
the variable is set to _v_a_l_u_e. When using --aa or --AA and the com-
pound assignment syntax to create array variables, additional
attributes do not take effect until subsequent assignments.
The return value is 0 unless an invalid option is encountered,
an attempt is made to define a function using "-f foo=bar", an
attempt is made to assign a value to a readonly variable, an at-
tempt is made to assign a value to an array variable without us-
ing the compound assignment syntax (see AArrrraayyss above), one of
the _n_a_m_e_s is not a valid shell variable name, an attempt is made
to turn off readonly status for a readonly variable, an attempt
is made to turn off array status for an array variable, or an
attempt is made to display a non-existent function with --ff.
ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]]
Without options, display the list of currently remembered direc-
tories. The default display is on a single line with directory
names separated by spaces. Directories are added to the list
with the ppuusshhdd command; the ppooppdd command removes entries from
the list. The current directory is always the first directory
in the stack.
Options, if supplied, have the following meanings:
--cc Clears the directory stack by deleting all of the en-
tries.
--ll Produces a listing using full pathnames; the default
listing format uses a tilde to denote the home directory.
--pp Print the directory stack with one entry per line.
--vv Print the directory stack with one entry per line, pre-
fixing each entry with its index in the stack.
++_n Displays the _nth entry counting from the left of the list
shown by ddiirrss when invoked without options, starting with
zero.
--_n Displays the _nth entry counting from the right of the
list shown by ddiirrss when invoked without options, starting
with zero.
The return value is 0 unless an invalid option is supplied or _n
indexes beyond the end of the directory stack.
ddiissoowwnn [--aarr] [--hh] [_i_d ...]
Without options, remove each _i_d from the table of active jobs.
Each _i_d may be a job specification _j_o_b_s_p_e_c or a process ID _p_i_d;
if _i_d is a _p_i_d, ddiissoowwnn uses the job containing _p_i_d as _j_o_b_s_p_e_c.
If the --hh option is supplied, ddiissoowwnn does not remove the jobs
corresponding to each _i_d from the jobs table, but rather marks
them so the shell does not send SSIIGGHHUUPP to the job if the shell
receives a SSIIGGHHUUPP.
If no _i_d is supplied, the --aa option means to remove or mark all
jobs; the --rr option without an _i_d argument removes or marks run-
ning jobs. If no _i_d is supplied, and neither the --aa nor the --rr
option is supplied, ddiissoowwnn removes or marks the current job.
The return value is 0 unless an _i_d does not specify a valid job.
eecchhoo [--nneeEE] [_a_r_g ...]
Output the _a_r_gs, separated by spaces, followed by a newline.
The return status is 0 unless a write error occurs. If --nn is
specified, the trailing newline is not printed.
If the --ee option is given, eecchhoo interprets the following back-
slash-escaped characters. The --EE option disables interpretation
of these escape characters, even on systems where they are in-
terpreted by default. The xxppgg__eecchhoo shell option determines
whether or not eecchhoo interprets any options and expands these es-
cape characters. eecchhoo does not interpret ---- to mean the end of
options.
eecchhoo interprets the following escape sequences:
\\aa alert (bell)
\\bb backspace
\\cc suppress further output
\\ee
\\EE an escape character
\\ff form feed
\\nn new line
\\rr carriage return
\\tt horizontal tab
\\vv vertical tab
\\\\ backslash
\\00_n_n_n The eight-bit character whose value is the octal value
_n_n_n (zero to three octal digits).
\\xx_H_H The eight-bit character whose value is the hexadecimal
value _H_H (one or two hex digits).
\\uu_H_H_H_H The Unicode (ISO/IEC 10646) character whose value is the
hexadecimal value _H_H_H_H (one to four hex digits).
\\UU_H_H_H_H_H_H_H_H
The Unicode (ISO/IEC 10646) character whose value is the
hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits).
eecchhoo writes any unrecognized backslash-escaped characters un-
changed.
eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...]
Enable and disable builtin shell commands. Disabling a builtin
allows an executable file which has the same name as a shell
builtin to be executed without specifying a full pathname, even
though the shell normally searches for builtins before files.
If --nn is supplied, each _n_a_m_e is disabled; otherwise, _n_a_m_es are
enabled. For example, to use the tteesstt binary found using PPAATTHH
instead of the shell builtin version, run "enable -n test".
If no _n_a_m_e arguments are supplied, or if the --pp option is sup-
plied, print a list of shell builtins. With no other option ar-
guments, the list consists of all enabled shell builtins. If --nn
is supplied, print only disabled builtins. If --aa is supplied,
the list printed includes all builtins, with an indication of
whether or not each is enabled. The --ss option means to restrict
the output to the POSIX _s_p_e_c_i_a_l builtins.
The --ff option means to load the new builtin command _n_a_m_e from
shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading.
If _f_i_l_e_n_a_m_e does not contain a slash, BBaasshh will use the value of
the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a colon-separated list of
directories in which to search for _f_i_l_e_n_a_m_e. The default for
BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH is system-dependent, and may include "." to
force a search of the current directory. The --dd option will
delete a builtin previously loaded with --ff. If _-_s is used with
_-_f, the new builtin becomes a POSIX special builtin.
If no options are supplied and a _n_a_m_e is not a shell builtin,
eennaabbllee will attempt to load _n_a_m_e from a shared object named
_n_a_m_e, as if the command were "enable -f _n_a_m_e _n_a_m_e".
The return value is 0 unless a _n_a_m_e is not a shell builtin or
there is an error loading a new builtin from a shared object.
eevvaall [_a_r_g ...]
Concatenate the _a_r_gs together into a single command, separating
them with spaces. BBaasshh then reads and execute this command, and
returns its exit status as the return status of eevvaall. If there
are no _a_r_g_s, or only null arguments, eevvaall returns 0.
eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]]
If _c_o_m_m_a_n_d is specified, it replaces the shell without creating
a new process. _c_o_m_m_a_n_d cannot be a shell builtin or function.
The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If the --ll option
is supplied, the shell places a dash at the beginning of the ze-
roth argument passed to _c_o_m_m_a_n_d. This is what _l_o_g_i_n(1) does.
The --cc option causes _c_o_m_m_a_n_d to be executed with an empty envi-
ronment. If --aa is supplied, the shell passes _n_a_m_e as the zeroth
argument to the executed command.
If _c_o_m_m_a_n_d cannot be executed for some reason, a non-interactive
shell exits, unless the eexxeeccffaaiill shell option is enabled. In
that case, it returns a non-zero status. An interactive shell
returns a non-zero status if the file cannot be executed. A
subshell exits unconditionally if eexxeecc fails.
If _c_o_m_m_a_n_d is not specified, any redirections take effect in the
current shell, and the return status is 0. If there is a redi-
rection error, the return status is 1.
eexxiitt [_n]
Cause the shell to exit with a status of _n. If _n is omitted,
the exit status is that of the last command executed. Any trap
on EEXXIITT is executed before the shell terminates.
eexxppoorrtt [--ffnn] [_n_a_m_e[=_v_a_l_u_e]] ...
eexxppoorrtt --pp [[--ff]]
The supplied _n_a_m_e_s are marked for automatic export to the envi-
ronment of subsequently executed commands. If the --ff option is
given, the _n_a_m_e_s refer to functions.
The --nn option unexports, or removes the export attribute, from
each _n_a_m_e. If no _n_a_m_e_s are given, or if only the --pp option is
supplied, eexxppoorrtt displays a list of names of all exported vari-
ables on the standard output. Using --pp and --ff together displays
exported functions. The --pp option displays output in a form
that may be reused as input.
eexxppoorrtt allows the value of a variable to be set when it is ex-
ported or unexported by following the variable name with =_v_a_l_u_e.
This sets the value of the variable to _v_a_l_u_e while modifying the
export attribute. eexxppoorrtt returns an exit status of 0 unless an
invalid option is encountered, one of the _n_a_m_e_s is not a valid
shell variable name, or --ff is supplied with a _n_a_m_e that is not a
function.
ffaallssee Does nothing; returns a non-zero status.
ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t]
ffcc --ss [_p_a_t=_r_e_p] [_c_m_d]
The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t
from the history list and displays or edits and re-executes
them. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate
the last command beginning with that string) or as a number (an
index into the history list, where a negative number is used as
an offset from the current command number).
When listing, a _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is
equivalent to the current command (usually the ffcc command); oth-
erwise 0 is equivalent to -1 and -0 is invalid. If _l_a_s_t is not
specified, it is set to the current command for listing (so that
"fc -l -10" prints the last 10 commands) and to _f_i_r_s_t otherwise.
If _f_i_r_s_t is not specified, it is set to the previous command for
editing and -16 for listing.
If the --ll option is supplied, the commands are listed on the
standard output. The --nn option suppresses the command numbers
when listing. The --rr option reverses the order of the commands.
Otherwise, ffcc invokes the editor named by _e_n_a_m_e on a file con-
taining those commands. If _e_n_a_m_e is not supplied, ffcc uses the
value of the FFCCEEDDIITT variable, and the value of EEDDIITTOORR if FFCCEEDDIITT
is not set. If neither variable is set, ffcc uses _v_i_. When edit-
ing is complete, ffcc reads the file containing the edited com-
mands and echoes and executes them.
In the second form, ffcc re-executes _c_o_m_m_a_n_d after replacing each
instance of _p_a_t with _r_e_p. _C_o_m_m_a_n_d is interpreted the same as
_f_i_r_s_t above.
A useful alias to use with ffcc is "r="fc -s"", so that typing "r
cc" runs the last command beginning with "cc" and typing "r" re-
executes the last command.
If the first form is used, the return value is zero unless an
invalid option is encountered or _f_i_r_s_t or _l_a_s_t specify history
lines out of range. When editing and re-executing a file of
commands, the return value is the value of the last command exe-
cuted or failure if an error occurs with the temporary file. If
the second form is used, the return status is that of the re-ex-
ecuted command, unless _c_m_d does not specify a valid history en-
try, in which case ffcc returns a non-zero status.
ffgg [_j_o_b_s_p_e_c]
Resume _j_o_b_s_p_e_c in the foreground, and make it the current job.
If _j_o_b_s_p_e_c is not present, ffgg uses the shell's notion of the
_c_u_r_r_e_n_t _j_o_b. The return value is that of the command placed
into the foreground, or failure if run when job control is dis-
abled or, when run with job control enabled, if _j_o_b_s_p_e_c does not
specify a valid job or _j_o_b_s_p_e_c specifies a job that was started
without job control.
ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g ...]
ggeettooppttss is used by shell scripts and functions to parse posi-
tional parameters and obtain options and their arguments. _o_p_t_-
_s_t_r_i_n_g contains the option characters to be recognized; if a
character is followed by a colon, the option is expected to have
an argument, which should be separated from it by white space.
The colon and question mark characters may not be used as option
characters.
Each time it is invoked, ggeettooppttss places the next option in the
shell variable _n_a_m_e, initializing _n_a_m_e if it does not exist, and
the index of the next argument to be processed into the variable
OOPPTTIINNDD. OOPPTTIINNDD is initialized to 1 each time the shell or a
shell script is invoked. When an option requires an argument,
ggeettooppttss places that argument into the variable OOPPTTAARRGG.
The shell does not reset OOPPTTIINNDD automatically; it must be manu-
ally reset between multiple calls to ggeettooppttss within the same
shell invocation to use a new set of parameters.
When it reaches the end of options, ggeettooppttss exits with a return
value greater than zero. OOPPTTIINNDD is set to the index of the
first non-option argument, and _n_a_m_e is set to ?.
ggeettooppttss normally parses the positional parameters, but if more
arguments are supplied as _a_r_g values, ggeettooppttss parses those in-
stead.
ggeettooppttss can report errors in two ways. If the first character
of _o_p_t_s_t_r_i_n_g is a colon, ggeettooppttss uses _s_i_l_e_n_t error reporting.
In normal operation, ggeettooppttss prints diagnostic messages when it
encounters invalid options or missing option arguments. If the
variable OOPPTTEERRRR is set to 0, ggeettooppttss does not display any error
messages, even if the first character of _o_p_t_s_t_r_i_n_g is not a
colon.
If ggeettooppttss detects an invalid option, it places ? into _n_a_m_e and,
if not silent, prints an error message and unsets OOPPTTAARRGG. If
ggeettooppttss is silent, it assigns the option character found to OOPP--
TTAARRGG and does not print a diagnostic message.
If a required argument is not found, and ggeettooppttss is not silent,
it sets the value of _n_a_m_e to a question mark (??), unsets OOPPTTAARRGG,
and prints a diagnostic message. If ggeettooppttss is silent, it sets
the value of _n_a_m_e to a colon (::) and sets OOPPTTAARRGG to the option
character found.
ggeettooppttss returns true if an option, specified or unspecified, is
found. It returns false if the end of options is encountered or
an error occurs.
hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e]
Each time hhaasshh is invoked, it remembers the full pathname of the
command _n_a_m_e as determined by searching the directories in
$$PPAATTHH. Any previously-remembered pathname associated with _n_a_m_e
is discarded. If the --pp option is supplied, hhaasshh uses _f_i_l_e_n_a_m_e
as the full pathname of the command.
The --rr option causes the shell to forget all remembered loca-
tions. Assigning to the PPAATTHH variable also clears all hashed
filenames. The --dd option causes the shell to forget the remem-
bered location of each _n_a_m_e.
If the --tt option is supplied, hhaasshh prints the full pathname cor-
responding to each _n_a_m_e. If multiple _n_a_m_e arguments are sup-
plied with --tt, hhaasshh prints the _n_a_m_e before the corresponding
hashed full pathname. The --ll option displays output in a format
that may be reused as input.
If no arguments are given, or if only --ll is supplied, hhaasshh
prints information about remembered commands. The --tt, --dd, and
--pp options (the options that act on the _n_a_m_e arguments) are mu-
tually exclusive. Only one will be active. If more than one is
supplied, --tt has higher priority than --pp, and both have higher
priority than --dd.
The return status is zero unless a _n_a_m_e is not found or an in-
valid option is supplied.
hheellpp [--ddmmss] [_p_a_t_t_e_r_n]
Display helpful information about builtin commands. If _p_a_t_t_e_r_n
is specified, hheellpp gives detailed help on all commands matching
_p_a_t_t_e_r_n as described below; otherwise it displays a list of all
the builtins and shell compound commands.
Options, if supplied, have the follow meanings:
--dd Display a short description of each _p_a_t_t_e_r_n
--mm Display the description of each _p_a_t_t_e_r_n in a manpage-like
format
--ss Display only a short usage synopsis for each _p_a_t_t_e_r_n
If _p_a_t_t_e_r_n contains pattern matching characters (see PPaatttteerrnn
MMaattcchhiinngg above) it's treated as a shell pattern and hheellpp prints
the description of each help topic matching _p_a_t_t_e_r_n.
If not, and _p_a_t_t_e_r_n exactly matches the name of a help topic,
hheellpp prints the description associated with that topic. Other-
wise, hheellpp performs prefix matching and prints the descriptions
of all matching help topics.
The return status is 0 unless no command matches _p_a_t_t_e_r_n.
hhiissttoorryy [[_n]]
hhiissttoorryy --cc
hhiissttoorryy --dd _o_f_f_s_e_t
hhiissttoorryy --dd _s_t_a_r_t-_e_n_d
hhiissttoorryy --aannrrww [_f_i_l_e_n_a_m_e]
hhiissttoorryy --pp _a_r_g [_a_r_g ...]
hhiissttoorryy --ss _a_r_g [_a_r_g ...]
With no options, display the command history list with numbers.
Entries prefixed with a ** have been modified. An argument of _n
lists only the last _n entries. If the shell variable HHIISSTTTTIIMMEE--
FFOORRMMAATT is set and not null, it is used as a format string for
_s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis-
played history entry. If hhiissttoorryy uses HHIISSTTTTIIMMEEFFOORRMMAATT, it does
not print an intervening space between the formatted time stamp
and the history entry.
If _f_i_l_e_n_a_m_e is supplied, hhiissttoorryy uses it as the name of the his-
tory file; if not, it uses the value of HHIISSTTFFIILLEE. If _f_i_l_e_n_a_m_e
is not supplied and HHIISSTTFFIILLEE is unset or null, the --aa,, --nn,, --rr,,
and --ww options have no effect.
Options, if supplied, have the following meanings:
--cc Clear the history list by deleting all the entries. This
can be used with the other options to replace the history
list.
--dd _o_f_f_s_e_t
Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t
is negative, it is interpreted as relative to one greater
than the last history position, so negative indices count
back from the end of the history, and an index of -1
refers to the current hhiissttoorryy --dd command.
--dd _s_t_a_r_t-_e_n_d
Delete the range of history entries between positions
_s_t_a_r_t and _e_n_d, inclusive. Positive and negative values
for _s_t_a_r_t and _e_n_d are interpreted as described above.
--aa Append the "new" history lines to the history file.
These are history lines entered since the beginning of
the current bbaasshh session, but not already appended to the
history file.
--nn Read the history lines not already read from the history
file and add them to the current history list. These are
lines appended to the history file since the beginning of
the current bbaasshh session.
--rr Read the history file and append its contents to the cur-
rent history list.
--ww Write the current history list to the history file, over-
writing the history file.
--pp Perform history substitution on the following _a_r_g_s and
display the result on the standard output, without stor-
ing the results in the history list. Each _a_r_g must be
quoted to disable normal history expansion.
--ss Store the _a_r_g_s in the history list as a single entry.
The last command in the history list is removed before
adding the _a_r_g_s.
If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, hhiissttoorryy writes the time
stamp information associated with each history entry to the his-
tory file, marked with the history comment character as de-
scribed above. When the history file is read, lines beginning
with the history comment character followed immediately by a
digit are interpreted as timestamps for the following history
entry.
The return value is 0 unless an invalid option is encountered,
an error occurs while reading or writing the history file, an
invalid _o_f_f_s_e_t or range is supplied as an argument to --dd, or the
history expansion supplied as an argument to --pp fails.
jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ]
jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ]
The first form lists the active jobs. The options have the fol-
lowing meanings:
--ll List process IDs in addition to the normal information.
--nn Display information only about jobs that have changed
status since the user was last notified of their status.
--pp List only the process ID of the job's process group
leader.
--rr Display only running jobs.
--ss Display only stopped jobs.
If _j_o_b_s_p_e_c is supplied, jjoobbss restricts output to information
about that job. The return status is 0 unless an invalid option
is encountered or an invalid _j_o_b_s_p_e_c is supplied.
If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in
_c_o_m_m_a_n_d or _a_r_g_s with the corresponding process group ID, and ex-
ecutes _c_o_m_m_a_n_d, passing it _a_r_g_s, returning its exit status.
kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] _i_d [ ... ]
kkiillll --ll|--LL [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s]
Send the signal specified by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes
named by each _i_d. Each _i_d may be a job specification _j_o_b_s_p_e_c or
a process ID _p_i_d. _s_i_g_s_p_e_c is either a case-insensitive signal
name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or a sig-
nal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not sup-
plied, then kkiillll sends SSIIGGTTEERRMM.
The --ll option lists the signal names. If any arguments are sup-
plied when --ll is given, kkiillll lists the names of the signals cor-
responding to the arguments, and the return status is 0. The
_e_x_i_t___s_t_a_t_u_s argument to --ll is a number specifying either a sig-
nal number or the exit status of a process terminated by a sig-
nal; if it is supplied, kkiillll prints the name of the signal that
caused the process to terminate. kkiillll assumes that process exit
statuses are greater than 128; anything less than that is a sig-
nal number. The --LL option is equivalent to --ll.
kkiillll returns true if at least one signal was successfully sent,
or false if an error occurs or an invalid option is encountered.
lleett _a_r_g [_a_r_g ...]
Each _a_r_g is evaluated as an arithmetic expression (see AARRIITTHH--
MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett
returns 1; otherwise lleett returns 0.
llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ... | - ]
For each argument, create a local variable named _n_a_m_e and assign
it _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted by ddee--
ccllaarree. When llooccaall is used within a function, it causes the
variable _n_a_m_e to have a visible scope restricted to that func-
tion and its children. It is an error to use llooccaall when not
within a function.
If _n_a_m_e is -, it makes the set of shell options local to the
function in which llooccaall is invoked: any shell options changed
using the sseett builtin inside the function after the call to lloo--
ccaall are restored to their original values when the function re-
turns. The restore is performed as if a series of sseett commands
were executed to restore the values that were in place before
the function.
With no operands, llooccaall writes a list of local variables to the
standard output.
The return status is 0 unless llooccaall is used outside a function,
an invalid _n_a_m_e is supplied, or _n_a_m_e is a readonly variable.
llooggoouutt [[_n]]
Exit a login shell, returning a status of _n to the shell's par-
ent.
mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC
_c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y]
rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC
_c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y]
Read lines from the standard input, or from file descriptor _f_d
if the --uu option is supplied, into the indexed array variable
_a_r_r_a_y. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if
supplied, have the following meanings:
--dd Use the first character of _d_e_l_i_m to terminate each input
line, rather than newline. If _d_e_l_i_m is the empty string,
mmaappffiillee will terminate a line when it reads a NUL charac-
ter.
--nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, copy all lines.
--OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default
index is 0.
--ss Discard the first _c_o_u_n_t lines read.
--tt Remove a trailing _d_e_l_i_m (default newline) from each line
read.
--uu Read lines from file descriptor _f_d instead of the stan-
dard input.
--CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The
--cc option specifies _q_u_a_n_t_u_m.
--cc Specify the number of lines read between each call to
_c_a_l_l_b_a_c_k.
If --CC is specified without --cc, the default quantum is 5000.
When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next
array element to be assigned and the line to be assigned to that
element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after
the line is read but before the array element is assigned.
If not supplied with an explicit origin, mmaappffiillee will clear _a_r_-
_r_a_y before assigning to it.
mmaappffiillee returns zero unless an invalid option or option argument
is supplied, _a_r_r_a_y is invalid or unassignable, or if _a_r_r_a_y is
not an indexed array.
ppooppdd [-nn] [+_n] [-_n]
Remove entries from the directory stack. The elements are num-
bered from 0 starting at the first directory listed by ddiirrss, so
ppooppdd is equivalent to "popd +0." With no arguments, ppooppdd re-
moves the top directory from the stack, and changes to the new
top directory. Arguments, if supplied, have the following mean-
ings:
--nn Suppress the normal change of directory when removing di-
rectories from the stack, only manipulate the stack.
++_n Remove the _nth entry counting from the left of the list
shown by ddiirrss, starting with zero, from the stack. For
example: "popd +0" removes the first directory, "popd +1"
the second.
--_n Remove the _nth entry counting from the right of the list
shown by ddiirrss, starting with zero. For example: "popd
-0" removes the last directory, "popd -1" the next to
last.
If the top element of the directory stack is modified, and the
_-_n option was not supplied, ppooppdd uses the ccdd builtin to change
to the directory at the top of the stack. If the ccdd fails, ppooppdd
returns a non-zero value.
Otherwise, ppooppdd returns false if an invalid option is supplied,
the directory stack is empty, or _n specifies a non-existent di-
rectory stack entry.
If the ppooppdd command is successful, bbaasshh runs ddiirrss to show the
final contents of the directory stack, and the return status is
0.
pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s]
Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the
control of the _f_o_r_m_a_t. The --vv option assigns the output to the
variable _v_a_r rather than printing it to the standard output.
The _f_o_r_m_a_t is a character string which contains three types of
objects: plain characters, which are simply copied to standard
output, character escape sequences, which are converted and
copied to the standard output, and format specifications, each
of which causes printing of the next successive _a_r_g_u_m_e_n_t. In
addition to the standard _p_r_i_n_t_f(3) format characters ccCCssSS--
nnddiioouuxxXXeeEEffFFggGGaaAA, pprriinnttff interprets the following additional for-
mat specifiers:
%%bb causes pprriinnttff to expand backslash escape sequences in the
corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee.
%%qq causes pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a
format that can be reused as shell input. %%qq and %%QQ use
the $$'''' quoting style if any characters in the argument
string require it, and backslash quoting otherwise. If
the format string uses the _p_r_i_n_t_f alternate form, these
two formats quote the argument string using single
quotes.
%%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_-
_m_e_n_t before quoting it.
%%((_d_a_t_e_f_m_t))TT
causes pprriinnttff to output the date-time string resulting
from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3).
The corresponding _a_r_g_u_m_e_n_t is an integer representing the
number of seconds since the epoch. This format specifier
recognizes two special argument values: -1 represents the
current time, and -2 represents the time the shell was
invoked. If no argument is specified, conversion behaves
as if -1 had been supplied. This is an exception to the
usual pprriinnttff behavior.
The %b, %q, and %T format specifiers all use the field width and
precision arguments from the format specification and write that
many bytes from (or use that wide a field for) the expanded ar-
gument, which usually contains more characters than the origi-
nal.
The %n format specifier accepts a corresponding argument that is
treated as a shell variable name.
The %s and %c format specifiers accept an l (long) modifier,
which forces them to convert the argument string to a wide-char-
acter string and apply any supplied field width and precision in
terms of characters, not bytes. The %S and %C format specifiers
are equivalent to %ls and %lc, respectively.
Arguments to non-string format specifiers are treated as C con-
stants, except that a leading plus or minus sign is allowed, and
if the leading character is a single or double quote, the value
is the numeric value of the following character, using the cur-
rent locale.
The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_-
_m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied,
the extra format specifications behave as if a zero value or
null string, as appropriate, had been supplied. The return
value is zero on success, non-zero if an invalid option is sup-
plied or a write or assignment error occurs.
ppuusshhdd [--nn] [+_n] [-_n]
ppuusshhdd [--nn] [_d_i_r]
Add a directory to the top of the directory stack, or rotate the
stack, making the new top of the stack the current working di-
rectory. With no arguments, ppuusshhdd exchanges the top two ele-
ments of the directory stack. Arguments, if supplied, have the
following meanings:
--nn Suppress the normal change of directory when rotating or
adding directories to the stack, only manipulate the
stack.
++_n Rotate the stack so that the _nth directory (counting from
the left of the list shown by ddiirrss, starting with zero)
is at the top.
--_n Rotates the stack so that the _nth directory (counting
from the right of the list shown by ddiirrss, starting with
zero) is at the top.
_d_i_r Adds _d_i_r to the directory stack at the top.
After the stack has been modified, if the --nn option was not sup-
plied, ppuusshhdd uses the ccdd builtin to change to the directory at
the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero
value.
Otherwise, if no arguments are supplied, ppuusshhdd returns zero un-
less the directory stack is empty. When rotating the directory
stack, ppuusshhdd returns zero unless the directory stack is empty or
_n specifies a non-existent directory stack element.
If the ppuusshhdd command is successful, bbaasshh runs ddiirrss to show the
final contents of the directory stack.
ppwwdd [--LLPP]
Print the absolute pathname of the current working directory.
The pathname printed contains no symbolic links if the --PP option
is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command
is enabled. If the --LL option is used, the pathname printed may
contain symbolic links. The return status is 0 unless an error
occurs while reading the name of the current directory or an in-
valid option is supplied.
rreeaadd [--EEeerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s]
[--pp _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...]
Read one line from the standard input, or from the file descrip-
tor _f_d supplied as an argument to the --uu option, split it into
words as described above under WWoorrdd SSpplliittttiinngg, and assign the
first word to the first _n_a_m_e, the second word to the second
_n_a_m_e, and so on. If there are more words than names, the re-
maining words and their intervening delimiters are assigned to
the last _n_a_m_e. If there are fewer words read from the input
stream than names, the remaining names are assigned empty val-
ues. The characters in the value of the IIFFSS variable are used
to split the line into words using the same rules the shell uses
for expansion (described above under WWoorrdd SSpplliittttiinngg). The back-
slash character (\\) removes any special meaning for the next
character read and is used for line continuation.
Options, if supplied, have the following meanings:
--aa _a_n_a_m_e
The words are assigned to sequential indices of the array
variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any
new values are assigned. Other _n_a_m_e arguments are ig-
nored.
--dd _d_e_l_i_m
The first character of _d_e_l_i_m terminates the input line,
rather than newline. If _d_e_l_i_m is the empty string, rreeaadd
will terminate a line when it reads a NUL character.
--ee If the standard input is coming from a terminal, rreeaadd
uses rreeaaddlliinnee (see RREEAADDLLIINNEE above) to obtain the line.
RReeaaddlliinnee uses the current (or default, if line editing
was not previously active) editing settings, but uses
rreeaaddlliinnee's default filename completion.
--EE If the standard input is coming from a terminal, rreeaadd
uses rreeaaddlliinnee (see RREEAADDLLIINNEE above) to obtain the line.
RReeaaddlliinnee uses the current (or default, if line editing
was not previously active) editing settings, but uses
bash's default completion, including programmable comple-
tion.
--ii _t_e_x_t
If rreeaaddlliinnee is being used to read the line, rreeaadd places
_t_e_x_t into the editing buffer before editing begins.
--nn _n_c_h_a_r_s
rreeaadd returns after reading _n_c_h_a_r_s characters rather than
waiting for a complete line of input, unless it encoun-
ters EOF or rreeaadd times out, but honors a delimiter if it
reads fewer than _n_c_h_a_r_s characters before the delimiter.
--NN _n_c_h_a_r_s
rreeaadd returns after reading exactly _n_c_h_a_r_s characters
rather than waiting for a complete line of input, unless
it encounters EOF or rreeaadd times out. Any delimiter char-
acters in the input are not treated specially and do not
cause rreeaadd to return until it has read _n_c_h_a_r_s characters.
The result is not split on the characters in IIFFSS; the in-
tent is that the variable is assigned exactly the charac-
ters read (with the exception of backslash; see the --rr
option below).
--pp _p_r_o_m_p_t
Display _p_r_o_m_p_t on standard error, without a trailing new-
line, before attempting to read any input, but only if
input is coming from a terminal.
--rr Backslash does not act as an escape character. The back-
slash is considered to be part of the line. In particu-
lar, a backslash-newline pair may not then be used as a
line continuation.
--ss Silent mode. If input is coming from a terminal, charac-
ters are not echoed.
--tt _t_i_m_e_o_u_t
Cause rreeaadd to time out and return failure if it does not
read a complete line of input (or a specified number of
characters) within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a
decimal number with a fractional portion following the
decimal point. This option is only effective if rreeaadd is
reading input from a terminal, pipe, or other special
file; it has no effect when reading from regular files.
If rreeaadd times out, it saves any partial input read into
the specified variable _n_a_m_e, and the exit status is
greater than 128. If _t_i_m_e_o_u_t is 0, rreeaadd returns immedi-
ately, without trying to read any data. In this case,
the exit status is 0 if input is available on the speci-
fied file descriptor, or the read will return EOF, non-
zero otherwise.
--uu _f_d Read input from file descriptor _f_d instead of the stan-
dard input.
Other than the case where _d_e_l_i_m is the empty string, rreeaadd ig-
nores any NUL characters in the input.
If no _n_a_m_e_s are supplied, rreeaadd assigns the line read, without
the ending delimiter but otherwise unmodified, to the variable
RREEPPLLYY.
The exit status is zero, unless end-of-file is encountered, rreeaadd
times out (in which case the status is greater than 128), a
variable assignment error (such as assigning to a readonly vari-
able) occurs, or an invalid file descriptor is supplied as the
argument to --uu.
rreeaaddoonnllyy [--aaAAff] [--pp] [_n_a_m_e[=_w_o_r_d] ...]
The given _n_a_m_e_s are marked readonly; the values of these _n_a_m_e_s
may not be changed by subsequent assignment or unset. If the --ff
option is supplied, each _n_a_m_e refers to a shell function. The
--aa option restricts the variables to indexed arrays; the --AA op-
tion restricts the variables to associative arrays. If both op-
tions are supplied, --AA takes precedence. If no _n_a_m_e arguments
are supplied, or if the --pp option is supplied, print a list of
all readonly names. The other options may be used to restrict
the output to a subset of the set of readonly names. The --pp op-
tion displays output in a format that may be reused as input.
rreeaaddoonnllyy allows the value of a variable to be set at the same
time the readonly attribute is changed by following the variable
name with =_v_a_l_u_e. This sets the value of the variable is to
_v_a_l_u_e while modifying the readonly attribute.
The return status is 0 unless an invalid option is encountered,
one of the _n_a_m_e_s is not a valid shell variable name, or --ff is
supplied with a _n_a_m_e that is not a function.
rreettuurrnn [_n]
Stop executing a shell function or sourced file and return the
value specified by _n to its caller. If _n is omitted, the return
status is that of the last command executed. If rreettuurrnn is exe-
cuted by a trap handler, the last command used to determine the
status is the last command executed before the trap handler. If
rreettuurrnn is executed during a DDEEBBUUGG trap, the last command used to
determine the status is the last command executed by the trap
handler before rreettuurrnn was invoked.
When rreettuurrnn is used to terminate execution of a script being ex-
ecuted by the .. (ssoouurrccee) command, it causes the shell to stop
executing that script and return either _n or the exit status of
the last command executed within the script as the exit status
of the script. If _n is supplied, the return value is its least
significant 8 bits.
Any command associated with the RREETTUURRNN trap is executed before
execution resumes after the function or script.
The return status is non-zero if rreettuurrnn is supplied a non-nu-
meric argument, or is used outside a function and not during ex-
ecution of a script by .. or ssoouurrccee.
sseett [--aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...]
sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...]
sseett --oo
sseett ++oo Without options, display the name and value of each shell vari-
able in a format that can be reused as input for setting or re-
setting the currently-set variables. Read-only variables cannot
be reset. In posix mode, only shell variables are listed. The
output is sorted according to the current locale. When options
are specified, they set or unset shell attributes. Any argu-
ments remaining after option processing are treated as values
for the positional parameters and are assigned, in order, to $$11,
$$22, ..., $$_n. Options, if specified, have the following mean-
ings:
--aa Each variable or function that is created or modified is
given the export attribute and marked for export to the
environment of subsequent commands.
--bb Report the status of terminated background jobs immedi-
ately, rather than before the next primary prompt or af-
ter a foreground command terminates. This is effective
only when job control is enabled.
--ee Exit immediately if a _p_i_p_e_l_i_n_e (which may consist of a
single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _l_i_s_t, or a _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d
(see SSHHEELLLL GGRRAAMMMMAARR above), exits with a non-zero status.
The shell does not exit if the command that fails is
part of the command list immediately following a wwhhiillee
or uunnttiill reserved word, part of the test following the
iiff or eelliiff reserved words, part of any command executed
in a &&&& or |||| list except the command following the fi-
nal &&&& or ||||, any command in a pipeline but the last
(subject to the state of the ppiippeeffaaiill shell option), or
if the command's return value is being inverted with !!.
If a compound command other than a subshell returns a
non-zero status because a command failed while --ee was
being ignored, the shell does not exit. A trap on EERRRR,
if set, is executed before the shell exits. This option
applies to the shell environment and each subshell envi-
ronment separately (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT
above), and may cause subshells to exit before executing
all the commands in the subshell.
If a compound command or shell function executes in a
context where --ee is being ignored, none of the commands
executed within the compound command or function body
will be affected by the --ee setting, even if --ee is set
and a command returns a failure status. If a compound
command or shell function sets --ee while executing in a
context where --ee is ignored, that setting will not have
any effect until the compound command or the command
containing the function call completes.
--ff Disable pathname expansion.
--hh Remember the location of commands as they are looked up
for execution. This is enabled by default.
--kk All arguments in the form of assignment statements are
placed in the environment for a command, not just those
that precede the command name.
--mm Monitor mode. Job control is enabled. This option is
on by default for interactive shells on systems that
support it (see JJOOBB CCOONNTTRROOLL above). All processes run
in a separate process group. When a background job com-
pletes, the shell prints a line containing its exit sta-
tus.
--nn Read commands but do not execute them. This may be used
to check a shell script for syntax errors. This is ig-
nored by interactive shells.
--oo _o_p_t_i_o_n_-_n_a_m_e
The _o_p_t_i_o_n_-_n_a_m_e can be one of the following:
aalllleexxppoorrtt
Same as --aa.
bbrraacceeeexxppaanndd
Same as --BB.
eemmaaccss Use an emacs-style command line editing inter-
face. This is enabled by default when the shell
is interactive, unless the shell is started with
the ----nnooeeddiittiinngg option. This also affects the
editing interface used for rreeaadd --ee.
eerrrreexxiitt Same as --ee.
eerrrrttrraaccee
Same as --EE.
ffuunnccttrraaccee
Same as --TT.
hhaasshhaallll Same as --hh.
hhiisstteexxppaanndd
Same as --HH.
hhiissttoorryy Enable command history, as described above under
HHIISSTTOORRYY. This option is on by default in inter-
active shells.
iiggnnoorreeeeooff
The effect is as if the shell command
"IGNOREEOF=10" had been executed (see SShheellll
VVaarriiaabblleess above).
kkeeyywwoorrdd Same as --kk.
mmoonniittoorr Same as --mm.
nnoocclloobbbbeerr
Same as --CC.
nnooeexxeecc Same as --nn.
nnoogglloobb Same as --ff.
nnoolloogg Currently ignored.
nnoottiiffyy Same as --bb.
nnoouunnsseett Same as --uu.
oonneeccmmdd Same as --tt.
pphhyyssiiccaall
Same as --PP.
ppiippeeffaaiill
If set, the return value of a pipeline is the
value of the last (rightmost) command to exit
with a non-zero status, or zero if all commands
in the pipeline exit successfully. This option
is disabled by default.
ppoossiixx Enable posix mode; change the behavior of bbaasshh
where the default operation differs from the
POSIX standard to match the standard. See SSEEEE
AALLSSOO below for a reference to a document that
details how posix mode affects bash's behavior.
pprriivviilleeggeedd
Same as --pp.
vveerrbboossee Same as --vv.
vvii Use a vi-style command line editing interface.
This also affects the editing interface used for
rreeaadd --ee.
xxttrraaccee Same as --xx.
If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, sseett prints the
current shell option settings. If ++oo is supplied with
no _o_p_t_i_o_n_-_n_a_m_e, sseett prints a series of sseett commands to
recreate the current option settings on the standard
output.
--pp Turn on _p_r_i_v_i_l_e_g_e_d mode. In this mode, the shell does
not read the $$EENNVV and $$BBAASSHH__EENNVV files, shell functions
are not inherited from the environment, and the SSHHEELL--
LLOOPPTTSS, BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if
they appear in the environment, are ignored. If the
shell is started with the effective user (group) id not
equal to the real user (group) id, and the --pp option is
not supplied, these actions are taken and the effective
user id is set to the real user id. If the --pp option is
supplied at startup, the effective user id is not reset.
Turning this option off causes the effective user and
group ids to be set to the real user and group ids.
--rr Enable restricted shell mode. This option cannot be un-
set once it has been set.
--tt Exit after reading and executing one command.
--uu Treat unset variables and parameters other than the spe-
cial parameters "@" and "*", or array variables sub-
scripted with "@" or "*", as an error when performing
parameter expansion. If expansion is attempted on an
unset variable or parameter, the shell prints an error
message, and, if not interactive, exits with a non-zero
status.
--vv Print shell input lines as they are read.
--xx After expanding each _s_i_m_p_l_e _c_o_m_m_a_n_d, ffoorr command, ccaassee
command, sseelleecctt command, or arithmetic ffoorr command, dis-
play the expanded value of PPSS44, followed by the command
and its expanded arguments or associated word list, to
the standard error.
--BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn
above). This is on by default.
--CC If set, bbaasshh does not overwrite an existing file with
the >>, >>&&, and <<>> redirection operators. Using the
redirection operator >>|| instead of >> will override this
and force the creation of an output file.
--EE If set, any trap on EERRRR is inherited by shell functions,
command substitutions, and commands executed in a sub-
shell environment. The EERRRR trap is normally not inher-
ited in such cases.
--HH Enable !! style history substitution. This option is on
by default when the shell is interactive.
--PP If set, the shell does not resolve symbolic links when
executing commands such as ccdd that change the current
working directory. It uses the physical directory
structure instead. By default, bbaasshh follows the logical
chain of directories when performing commands which
change the current directory.
--TT If set, any traps on DDEEBBUUGG and RREETTUURRNN are inherited by
shell functions, command substitutions, and commands ex-
ecuted in a subshell environment. The DDEEBBUUGG and RREETTUURRNN
traps are normally not inherited in such cases.
---- If no arguments follow this option, unset the positional
parameters. Otherwise, set the positional parameters to
the _a_r_gs, even if some of them begin with a --.
-- Signal the end of options, and assign all remaining _a_r_gs
to the positional parameters. The --xx and --vv options are
turned off. If there are no _a_r_gs, the positional para-
meters remain unchanged.
The options are off by default unless otherwise noted. Using +
rather than - causes these options to be turned off. The op-
tions can also be specified as arguments to an invocation of the
shell. The current set of options may be found in $$--. The re-
turn status is always zero unless an invalid option is encoun-
tered.
sshhiifftt [_n]
Rename positional parameters from _n+1 ... to $$11 ........ Parameters
represented by the numbers $$## down to $$##-_n+1 are unset. _n must
be a non-negative number less than or equal to $$##. If _n is 0,
no parameters are changed. If _n is not given, it is assumed to
be 1. If _n is greater than $$##, the positional parameters are
not changed. The return status is greater than zero if _n is
greater than $$## or less than zero; otherwise 0.
sshhoopptt [--ppqqssuu] [--oo] [_o_p_t_n_a_m_e ...]
Toggle the values of settings controlling optional shell behav-
ior. The settings can be either those listed below, or, if the
--oo option is used, those available with the --oo option to the sseett
builtin command.
With no options, or with the --pp option, display a list of all
settable options, with an indication of whether or not each is
set; if any _o_p_t_n_a_m_e_s are supplied, the output is restricted to
those options. The --pp option displays output in a form that may
be reused as input.
Other options have the following meanings:
--ss Enable (set) each _o_p_t_n_a_m_e.
--uu Disable (unset) each _o_p_t_n_a_m_e.
--qq Suppresses normal output (quiet mode); the return status
indicates whether the _o_p_t_n_a_m_e is set or unset. If multi-
ple _o_p_t_n_a_m_e arguments are supplied with --qq, the return
status is zero if all _o_p_t_n_a_m_e_s are enabled; non-zero oth-
erwise.
--oo Restricts the values of _o_p_t_n_a_m_e to be those defined for
the --oo option to the sseett builtin.
If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, sshhoopptt
shows only those options which are set or unset, respectively.
Unless otherwise noted, the sshhoopptt options are disabled (unset)
by default.
The return status when listing options is zero if all _o_p_t_n_a_m_e_s
are enabled, non-zero otherwise. When setting or unsetting op-
tions, the return status is zero unless an _o_p_t_n_a_m_e is not a
valid shell option.
The list of sshhoopptt options is:
aarrrraayy__eexxppaanndd__oonnccee
If set, the shell suppresses multiple evaluation of as-
sociative and indexed array subscripts during arithmetic
expression evaluation, while executing builtins that can
perform variable assignments, and while executing
builtins that perform array dereferencing.
aassssoocc__eexxppaanndd__oonnccee
Deprecated; a synonym for aarrrraayy__eexxppaanndd__oonnccee.
aauuttooccdd If set, a command name that is the name of a directory
is executed as if it were the argument to the ccdd com-
mand. This option is only used by interactive shells.
bbaasshh__ssoouurrccee__ffuullllppaatthh
If set, filenames added to the BBAASSHH__SSOOUURRCCEE array vari-
able are converted to full pathnames (see SShheellll VVaarrii--
aabblleess above).
ccddaabbllee__vvaarrss
If set, an argument to the ccdd builtin command that is
not a directory is assumed to be the name of a variable
whose value is the directory to change to.
ccddssppeellll If set, the ccdd command attempts to correct minor errors
in the spelling of a directory component. Minor errors
include transposed characters, a missing character, and
one extra character. If ccdd corrects the directory name,
it prints the corrected filename, and the command pro-
ceeds. This option is only used by interactive shells.
cchheecckkhhaasshh
If set, bbaasshh checks that a command found in the hash ta-
ble exists before trying to execute it. If a hashed
command no longer exists, bbaasshh performs a normal path
search.
cchheecckkjjoobbss
If set, bbaasshh lists the status of any stopped and running
jobs before exiting an interactive shell. If any jobs
are running, bbaasshh defers the exit until a second exit is
attempted without an intervening command (see JJOOBB CCOONN--
TTRROOLL above). The shell always postpones exiting if any
jobs are stopped.
cchheecckkwwiinnssiizzee
If set, bbaasshh checks the window size after each external
(non-builtin) command and, if necessary, updates the
values of LLIINNEESS and CCOOLLUUMMNNSS, using the file descriptor
associated with the standard error if it is a terminal.
This option is enabled by default.
ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple-
line command in the same history entry. This allows
easy re-editing of multi-line commands. This option is
enabled by default, but only has an effect if command
history is enabled, as described above under HHIISSTTOORRYY.
ccoommppaatt3311
ccoommppaatt3322
ccoommppaatt4400
ccoommppaatt4411
ccoommppaatt4422
ccoommppaatt4433
ccoommppaatt4444
These control aspects of the shell's compatibility mode
(see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below).
ccoommpplleettee__ffuullllqquuoottee
If set, bbaasshh quotes all shell metacharacters in file-
names and directory names when performing completion.
If not set, bbaasshh removes metacharacters such as the dol-
lar sign from the set of characters that will be quoted
in completed filenames when these metacharacters appear
in shell variable references in words to be completed.
This means that dollar signs in variable names that ex-
pand to directories will not be quoted; however, any
dollar signs appearing in filenames will not be quoted,
either. This is active only when bash is using back-
slashes to quote completed filenames. This variable is
set by default, which is the default bash behavior in
versions through 4.2.
ddiirreexxppaanndd
If set, bbaasshh replaces directory names with the results
of word expansion when performing filename completion.
This changes the contents of the rreeaaddlliinnee editing
buffer. If not set, bbaasshh attempts to preserve what the
user typed.
ddiirrssppeellll
If set, bbaasshh attempts spelling correction on directory
names during word completion if the directory name ini-
tially supplied does not exist.
ddoottgglloobb If set, bbaasshh includes filenames beginning with a "." in
the results of pathname expansion. The filenames _. and
_._. must always be matched explicitly, even if ddoottgglloobb is
set.
eexxeeccffaaiill
If set, a non-interactive shell will not exit if it can-
not execute the file specified as an argument to the
eexxeecc builtin. An interactive shell does not exit if
eexxeecc fails.
eexxppaanndd__aalliiaasseess
If set, aliases are expanded as described above under
AALLIIAASSEESS. This option is enabled by default for interac-
tive shells.
eexxttddeebbuugg
If set at shell invocation, or in a shell startup file,
arrange to execute the debugger profile before the shell
starts, identical to the ----ddeebbuuggggeerr option. If set af-
ter invocation, behavior intended for use by debuggers
is enabled:
11.. The --FF option to the ddeeccllaarree builtin displays the
source file name and line number corresponding to
each function name supplied as an argument.
22.. If the command run by the DDEEBBUUGG trap returns a
non-zero value, the next command is skipped and
not executed.
33.. If the command run by the DDEEBBUUGG trap returns a
value of 2, and the shell is executing in a sub-
routine (a shell function or a shell script exe-
cuted by the .. or ssoouurrccee builtins), the shell
simulates a call to rreettuurrnn.
44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described
in their descriptions above).
55.. Function tracing is enabled: command substitu-
tion, shell functions, and subshells invoked with
(( _c_o_m_m_a_n_d )) inherit the DDEEBBUUGG and RREETTUURRNN traps.
66.. Error tracing is enabled: command substitution,
shell functions, and subshells invoked with ((
_c_o_m_m_a_n_d )) inherit the EERRRR trap.
eexxttgglloobb If set, enable the extended pattern matching features
described above under PPaatthhnnaammee EExxppaannssiioonn.
eexxttqquuoottee
If set, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quoting is performed
within $${{_p_a_r_a_m_e_t_e_r}} expansions enclosed in double
quotes. This option is enabled by default.
ffaaiillgglloobb
If set, patterns which fail to match filenames during
pathname expansion result in an expansion error.
ffoorrccee__ffiiggnnoorree
If set, the suffixes specified by the FFIIGGNNOORREE shell
variable cause words to be ignored when performing word
completion even if the ignored words are the only possi-
ble completions. See SShheellll VVaarriiaabblleess above for a de-
scription of FFIIGGNNOORREE. This option is enabled by de-
fault.
gglloobbaasscciiiirraannggeess
If set, range expressions used in pattern matching
bracket expressions (see PPaatttteerrnn MMaattcchhiinngg above) behave
as if in the traditional C locale when performing com-
parisons. That is, pattern matching does not take the
current locale's collating sequence into account, so bb
will not collate between AA and BB, and upper-case and
lower-case ASCII characters will collate together.
gglloobbsskkiippddoottss
If set, pathname expansion will never match the file-
names _. and _._., even if the pattern begins with a ".".
This option is enabled by default.
gglloobbssttaarr
If set, the pattern **** used in a pathname expansion con-
text will match all files and zero or more directories
and subdirectories. If the pattern is followed by a //,
only directories and subdirectories match.
ggnnuu__eerrrrffmmtt
If set, shell error messages are written in the standard
GNU error message format.
hhiissttaappppeenndd
If set, the history list is appended to the file named
by the value of the HHIISSTTFFIILLEE variable when the shell ex-
its, rather than overwriting the file.
hhiissttrreeeeddiitt
If set, and rreeaaddlliinnee is being used, the user is given
the opportunity to re-edit a failed history substitu-
tion.
hhiissttvveerriiffyy
If set, and rreeaaddlliinnee is being used, the results of his-
tory substitution are not immediately passed to the
shell parser. Instead, the resulting line is loaded
into the rreeaaddlliinnee editing buffer, allowing further modi-
fication.
hhoossttccoommpplleettee
If set, and rreeaaddlliinnee is being used, bbaasshh will attempt to
perform hostname completion when a word containing a @@
is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE
above). This is enabled by default.
hhuuppoonneexxiitt
If set, bbaasshh will send SSIIGGHHUUPP to all jobs when an inter-
active login shell exits.
iinnhheerriitt__eerrrreexxiitt
If set, command substitution inherits the value of the
eerrrreexxiitt option, instead of unsetting it in the subshell
environment. This option is enabled when posix mode is
enabled.
iinntteerraaccttiivvee__ccoommmmeennttss
In an interactive shell, a word beginning with ## causes
that word and all remaining characters on that line to
be ignored, as in a non-interactive shell (see CCOOMMMMEENNTTSS
above). This option is enabled by default.
llaassttppiippee
If set, and job control is not active, the shell runs
the last command of a pipeline not executed in the back-
ground in the current shell environment.
lliitthhiisstt If set, and the ccmmddhhiisstt option is enabled, multi-line
commands are saved to the history with embedded newlines
rather than using semicolon separators where possible.
llooccaallvvaarr__iinnhheerriitt
If set, local variables inherit the value and attributes
of a variable of the same name that exists at a previous
scope before any new value is assigned. The nameref at-
tribute is not inherited.
llooccaallvvaarr__uunnsseett
If set, calling uunnsseett on local variables in previous
function scopes marks them so subsequent lookups find
them unset until that function returns. This is identi-
cal to the behavior of unsetting local variables at the
current function scope.
llooggiinn__sshheellll
The shell sets this option if it is started as a login
shell (see IINNVVOOCCAATTIIOONN above). The value may not be
changed.
mmaaiillwwaarrnn
If set, and a file that bbaasshh is checking for mail has
been accessed since the last time it was checked, bbaasshh
displays the message "The mail in _m_a_i_l_f_i_l_e has been
read".
nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn
If set, and rreeaaddlliinnee is being used, bbaasshh does not search
PPAATTHH for possible completions when completion is at-
tempted on an empty line.
nnooccaasseegglloobb
If set, bbaasshh matches filenames in a case-insensitive
fashion when performing pathname expansion (see PPaatthhnnaammee
EExxppaannssiioonn above).
nnooccaasseemmaattcchh
If set, bbaasshh matches patterns in a case-insensitive
fashion when performing matching while executing ccaassee or
[[[[ conditional commands, when performing pattern substi-
tution word expansions, or when filtering possible com-
pletions as part of programmable completion.
nnooeexxppaanndd__ttrraannssllaattiioonn
If set, bbaasshh encloses the translated results of $$""...""
quoting in single quotes instead of double quotes. If
the string is not translated, this has no effect.
nnuullllgglloobb
If set, pathname expansion patterns which match no files
(see PPaatthhnnaammee EExxppaannssiioonn above) expand to nothing and are
removed, rather than expanding to themselves.
ppaattssuubb__rreeppllaacceemmeenntt
If set, bbaasshh expands occurrences of && in the replacement
string of pattern substitution to the text matched by
the pattern, as described under PPaarraammeetteerr EExxppaannssiioonn
above. This option is enabled by default.
pprrooggccoommpp
If set, enable the programmable completion facilities
(see PPrrooggrraammmmaabbllee CCoommpplleettiioonn above). This option is en-
abled by default.
pprrooggccoommpp__aalliiaass
If set, and programmable completion is enabled, bbaasshh
treats a command name that doesn't have any completions
as a possible alias and attempts alias expansion. If it
has an alias, bbaasshh attempts programmable completion us-
ing the command word resulting from the expanded alias.
pprroommppttvvaarrss
If set, prompt strings undergo parameter expansion, com-
mand substitution, arithmetic expansion, and quote re-
moval after being expanded as described in PPRROOMMPPTTIINNGG
above. This option is enabled by default.
rreessttrriicctteedd__sshheellll
The shell sets this option if it is started in re-
stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value
may not be changed. This is not reset when the startup
files are executed, allowing the startup files to dis-
cover whether or not a shell is restricted.
sshhiifftt__vveerrbboossee
If set, the sshhiifftt builtin prints an error message when
the shift count exceeds the number of positional parame-
ters.
ssoouurrcceeppaatthh
If set, the .. (ssoouurrccee) builtin uses the value of PPAATTHH to
find the directory containing the file supplied as an
argument when the --pp option is not supplied. This op-
tion is enabled by default.
vvaarrrreeddiirr__cclloossee
If set, the shell automatically closes file descriptors
assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see
RREEDDIIRREECCTTIIOONN above) instead of leaving them open when the
command completes.
xxppgg__eecchhoo
If set, the eecchhoo builtin expands backslash-escape se-
quences by default. If the ppoossiixx shell option is also
enabled, eecchhoo does not interpret any options.
ssuussppeenndd [--ff]
Suspend the execution of this shell until it receives a SSIIGGCCOONNTT
signal. A login shell, or a shell without job control enabled,
cannot be suspended; the --ff option will override this and force
the suspension. The return status is 0 unless the shell is a
login shell or job control is not enabled and --ff is not sup-
plied.
tteesstt _e_x_p_r
[[ _e_x_p_r ]]
Return a status of 0 (true) or 1 (false) depending on the evalu-
ation of the conditional expression _e_x_p_r. Each operator and
operand must be a separate argument. Expressions are composed
of the primaries described above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS.
tteesstt does not accept any options, nor does it accept and ignore
an argument of ---- as signifying the end of options.
Expressions may be combined using the following operators,
listed in decreasing order of precedence. The evaluation de-
pends on the number of arguments; see below. tteesstt uses operator
precedence when there are five or more arguments.
!! _e_x_p_r True if _e_x_p_r is false.
(( _e_x_p_r ))
Returns the value of _e_x_p_r. This may be used to override
normal operator precedence.
_e_x_p_r_1 -aa _e_x_p_r_2
True if both _e_x_p_r_1 and _e_x_p_r_2 are true.
_e_x_p_r_1 -oo _e_x_p_r_2
True if either _e_x_p_r_1 or _e_x_p_r_2 is true.
tteesstt and [[ evaluate conditional expressions using a set of rules
based on the number of arguments.
0 arguments
The expression is false.
1 argument
The expression is true if and only if the argument is not
null.
2 arguments
If the first argument is !!, the expression is true if and
only if the second argument is null. If the first argu-
ment is one of the unary conditional operators listed
above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is
true if the unary test is true. If the first argument is
not a valid unary conditional operator, the expression is
false.
3 arguments
The following conditions are applied in the order listed.
If the second argument is one of the binary conditional
operators listed above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the
result of the expression is the result of the binary test
using the first and third arguments as operands. The --aa
and --oo operators are considered binary operators when
there are three arguments. If the first argument is !!,
the value is the negation of the two-argument test using
the second and third arguments. If the first argument is
exactly (( and the third argument is exactly )), the result
is the one-argument test of the second argument. Other-
wise, the expression is false.
4 arguments
The following conditions are applied in the order listed.
If the first argument is !!, the result is the negation of
the three-argument expression composed of the remaining
arguments. If the first argument is exactly (( and the
fourth argument is exactly )), the result is the two-argu-
ment test of the second and third arguments. Otherwise,
the expression is parsed and evaluated according to
precedence using the rules listed above.
5 or more arguments
The expression is parsed and evaluated according to
precedence using the rules listed above.
When the shell is in posix mode, or if the expression is part of
the [[[[ command, the << and >> operators sort using the current lo-
cale. If the shell is not in posix mode, the tteesstt and [[ com-
mands sort lexicographically using ASCII ordering.
The historical operator-precedence parsing with 4 or more argu-
ments can lead to ambiguities when it encounters strings that
look like primaries. The POSIX standard has deprecated the --aa
and --oo primaries and enclosing expressions within parentheses.
Scripts should no longer use them. It's much more reliable to
restrict test invocations to a single primary, and to replace
uses of --aa and --oo with the shell's &&&& and |||| list operators.
ttiimmeess Print the accumulated user and system times for the shell and
for processes run from the shell. The return status is 0.
ttrraapp [--llppPP] [[_a_c_t_i_o_n] _s_i_g_s_p_e_c ...]
The _a_c_t_i_o_n is a command that is read and executed when the shell
receives any of the signals _s_i_g_s_p_e_c. If _a_c_t_i_o_n is absent (and
there is a single _s_i_g_s_p_e_c) or --, each specified _s_i_g_s_p_e_c is reset
to the value it had when the shell was started. If _a_c_t_i_o_n is
the null string the signal specified by each _s_i_g_s_p_e_c is ignored
by the shell and by the commands it invokes.
If no arguments are supplied, ttrraapp displays the actions associ-
ated with each trapped signal as a set of ttrraapp commands that can
be reused as shell input to restore the current signal disposi-
tions. If --pp is given, and _a_c_t_i_o_n is not present, then ttrraapp
displays the actions associated with each _s_i_g_s_p_e_c or, if none
are supplied, for all trapped signals, as a set of ttrraapp commands
that can be reused as shell input to restore the current signal
dispositions. The --PP option behaves similarly, but displays
only the actions associated with each _s_i_g_s_p_e_c argument. --PP re-
quires at least one _s_i_g_s_p_e_c argument. The --PP or --pp options may
be used in a subshell environment (e.g., command substitution)
and, as long as they are used before ttrraapp is used to change a
signal's handling, will display the state of its parent's traps.
The --ll option prints a list of signal names and their corre-
sponding numbers. Each _s_i_g_s_p_e_c is either a signal name defined
in <_s_i_g_n_a_l_._h>, or a signal number. Signal names are case insen-
sitive and the SSIIGG prefix is optional. If --ll is supplied with
no _s_i_g_s_p_e_c arguments, it prints a list of valid signal names.
If a _s_i_g_s_p_e_c is EEXXIITT (0), _a_c_t_i_o_n is executed on exit from the
shell. If a _s_i_g_s_p_e_c is DDEEBBUUGG, _a_c_t_i_o_n is executed before every
_s_i_m_p_l_e _c_o_m_m_a_n_d, _f_o_r command, _c_a_s_e command, _s_e_l_e_c_t command, ((
arithmetic command, [[ conditional command, arithmetic _f_o_r com-
mand, and before the first command executes in a shell function
(see SSHHEELLLL GGRRAAMMMMAARR above). Refer to the description of the
eexxttddeebbuugg shell option (see sshhoopptt above) for details of its ef-
fect on the DDEEBBUUGG trap. If a _s_i_g_s_p_e_c is RREETTUURRNN, _a_c_t_i_o_n is exe-
cuted each time a shell function or a script executed with the ..
or ssoouurrccee builtins finishes executing.
If a _s_i_g_s_p_e_c is EERRRR, _a_c_t_i_o_n is executed whenever a pipeline
(which may consist of a single simple command), a list, or a
compound command returns a non-zero exit status, subject to the
following conditions. The EERRRR trap is not executed if the
failed command is part of the command list immediately following
a wwhhiillee or uunnttiill reserved word, part of the test in an _i_f state-
ment, part of a command executed in a &&&& or |||| list except the
command following the final &&&& or ||||, any command in a pipeline
but the last (subject to the state of the ppiippeeffaaiill shell op-
tion), or if the command's return value is being inverted using
!!. These are the same conditions obeyed by the eerrrreexxiitt (--ee) op-
tion.
When the shell is not interactive, signals ignored upon entry to
the shell cannot be trapped or reset. Interactive shells permit
trapping signals ignored on entry. Trapped signals that are not
being ignored are reset to their original values in a subshell
or subshell environment when one is created. The return status
is false if any _s_i_g_s_p_e_c is invalid; otherwise ttrraapp returns true.
ttrruuee Does nothing, returns a 0 status.
ttyyppee [--aaffttppPP] _n_a_m_e [_n_a_m_e ...]
Indicate how each _n_a_m_e would be interpreted if used as a command
name.
If the --tt option is used, ttyyppee prints a string which is one of
_a_l_i_a_s, _k_e_y_w_o_r_d, _f_u_n_c_t_i_o_n, _b_u_i_l_t_i_n, or _f_i_l_e if _n_a_m_e is an alias,
shell reserved word, function, builtin, or executable file, re-
spectively. If the _n_a_m_e is not found, ttyyppee prints nothing and
returns a non-zero exit status.
If the --pp option is used, ttyyppee either returns the pathname of
the executable file that would be found by searching $$PPAATTHH for
_n_a_m_e or nothing if "type -t name" would not return _f_i_l_e. The --PP
option forces a PPAATTHH search for each _n_a_m_e, even if "type -t
name" would not return _f_i_l_e. If _n_a_m_e is present in the table of
hashed commands, --pp and --PP print the hashed value, which is not
necessarily the file that appears first in PPAATTHH.
If the --aa option is used, ttyyppee prints all of the places that
contain a command named _n_a_m_e. This includes aliases, reserved
words, functions, and builtins, but the path search options (--pp
and --PP) can be supplied to restrict the output to executable
files. ttyyppee does not consult the table of hashed commands when
using --aa with --pp, and only performs a PPAATTHH search for _n_a_m_e.
The --ff option suppresses shell function lookup, as with the ccoomm--
mmaanndd builtin. ttyyppee returns true if all of the arguments are
found, false if any are not found.
uulliimmiitt [--HHSS] --aa
uulliimmiitt [--HHSS] [--bbccddeeffiikkllmmnnppqqrrssttuuvvxxPPRRTT [_l_i_m_i_t]]
Provides control over the resources available to the shell and
to processes it starts, on systems that allow such control.
The --HH and --SS options specify whether the hard or soft limit is
set for the given resource. A hard limit cannot be increased by
a non-root user once it is set; a soft limit may be increased up
to the value of the hard limit. If neither --HH nor --SS is speci-
fied, uulliimmiitt sets both the soft and hard limits.
The value of _l_i_m_i_t can be a number in the unit specified for the
resource or one of the special values hhaarrdd, ssoofftt, or uunnlliimmiitteedd,
which stand for the current hard limit, the current soft limit,
and no limit, respectively. If _l_i_m_i_t is omitted, uulliimmiitt prints
the current value of the soft limit of the resource, unless the
--HH option is given. When more than one resource is specified,
the limit name and unit, if appropriate, are printed before the
value. Other options are interpreted as follows:
--aa Report all current limits; no limits are set.
--bb The maximum socket buffer size.
--cc The maximum size of core files created.
--dd The maximum size of a process's data segment.
--ee The maximum scheduling priority ("nice").
--ff The maximum size of files written by the shell and its
children.
--ii The maximum number of pending signals.
--kk The maximum number of kqueues that may be allocated.
--ll The maximum size that may be locked into memory.
--mm The maximum resident set size (many systems do not honor
this limit).
--nn The maximum number of open file descriptors (most systems
do not allow this value to be set).
--pp The pipe size in 512-byte blocks (this may not be set).
--qq The maximum number of bytes in POSIX message queues.
--rr The maximum real-time scheduling priority.
--ss The maximum stack size.
--tt The maximum amount of cpu time in seconds.
--uu The maximum number of processes available to a single
user.
--vv The maximum amount of virtual memory available to the
shell and, on some systems, to its children.
--xx The maximum number of file locks.
--PP The maximum number of pseudoterminals.
--RR The maximum time a real-time process can run before
blocking, in microseconds.
--TT The maximum number of threads.
If _l_i_m_i_t is supplied, and the --aa option is not used, _l_i_m_i_t is
the new value of the specified resource. If no option is sup-
plied, then --ff is assumed.
Values are in 1024-byte increments, except for --tt, which is in
seconds; --RR, which is in microseconds; --pp, which is in units of
512-byte blocks; --PP, --TT, --bb, --kk, --nn, and --uu, which are unscaled
values; and, when in posix mode, --cc and --ff, which are in
512-byte increments. The return status is 0 unless an invalid
option or argument is supplied, or an error occurs while setting
a new limit.
uummaasskk [--pp] [--SS] [_m_o_d_e]
Set the user file-creation mask to _m_o_d_e. If _m_o_d_e begins with a
digit, it is interpreted as an octal number; otherwise it is in-
terpreted as a symbolic mode mask similar to that accepted by
_c_h_m_o_d(1). If _m_o_d_e is omitted, uummaasskk prints the current value of
the mask. The --SS option without a _m_o_d_e argument prints the mask
in a symbolic format; the default output is an octal number. If
the --pp option is supplied, and _m_o_d_e is omitted, the output is in
a form that may be reused as input. The return status is zero
if the mode was successfully changed or if no _m_o_d_e argument was
supplied, and non-zero otherwise.
uunnaalliiaass [-aa] [_n_a_m_e ...]
Remove each _n_a_m_e from the list of defined aliases. If --aa is
supplied, remove all alias definitions. The return value is
true unless a supplied _n_a_m_e is not a defined alias.
uunnsseett [-ffvv] [-nn] [_n_a_m_e ...]
For each _n_a_m_e, remove the corresponding variable or function.
If the --vv option is given, each _n_a_m_e refers to a shell variable,
and that variable is removed. If --ff is specified, each _n_a_m_e
refers to a shell function, and the function definition is re-
moved. If the --nn option is supplied, and _n_a_m_e is a variable
with the _n_a_m_e_r_e_f attribute, _n_a_m_e will be unset rather than the
variable it references. --nn has no effect if the --ff option is
supplied. Read-only variables and functions may not be unset.
When variables or functions are removed, they are also removed
from the environment passed to subsequent commands. If no op-
tions are supplied, each _n_a_m_e refers to a variable; if there is
no variable by that name, a function with that name, if any, is
unset. Some shell variables may not be unset. If any of
BBAASSHH__AALLIIAASSEESS, BBAASSHH__AARRGGVV00, BBAASSHH__CCMMDDSS, BBAASSHH__CCOOMMMMAANNDD, BBAASSHH__SSUUBB--
SSHHEELLLL, BBAASSHHPPIIDD, CCOOMMPP__WWOORRDDBBRREEAAKKSS, DDIIRRSSTTAACCKK, EEPPOOCCHHRREEAALLTTIIMMEE,
EEPPOOCCHHSSEECCOONNDDSS, FFUUNNCCNNAAMMEE, GGRROOUUPPSS, HHIISSTTCCMMDD, LLIINNEENNOO, RRAANNDDOOMM, SSEECC--
OONNDDSS, or SSRRAANNDDOOMM are unset, they lose their special properties,
even if they are subsequently reset. The exit status is true
unless a _n_a_m_e is readonly or may not be unset.
wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d ...]
Wait for each specified child process _i_d and return the termina-
tion status of the last _i_d. Each _i_d may be a process ID _p_i_d or
a job specification _j_o_b_s_p_e_c; if a jobspec is supplied, wwaaiitt
waits for all processes in the job.
If no options or _i_ds are supplied, wwaaiitt waits for all running
background jobs and the last-executed process substitution, if
its process id is the same as $$!!, and the return status is zero.
If the --nn option is supplied, wwaaiitt waits for any one of the
given _i_ds or, if no _i_ds are supplied, any job or process substi-
tution, to complete and returns its exit status. If none of the
supplied _i_ds is a child of the shell, or if no _i_ds are supplied
and the shell has no unwaited-for children, the exit status is
127.
If the --pp option is supplied, wwaaiitt assigns the process or job
identifier of the job for which the exit status is returned to
the variable _v_a_r_n_a_m_e named by the option argument. The vari-
able, which cannot be readonly, will be unset initially, before
any assignment. This is useful only when used with the --nn op-
tion.
Supplying the --ff option, when job control is enabled, forces
wwaaiitt to wait for each _i_d to terminate before returning its sta-
tus, instead of returning when it changes status.
If none of the _i_ds specify one of the shell's active child
processes, the return status is 127. If wwaaiitt is interrupted by
a signal, any _v_a_r_n_a_m_e will remain unset, and the return status
will be greater than 128, as described under SSIIGGNNAALLSS above.
Otherwise, the return status is the exit status of the last _i_d.
SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE
Bash-4.0 introduced the concept of a _s_h_e_l_l _c_o_m_p_a_t_i_b_i_l_i_t_y _l_e_v_e_l, speci-
fied as a set of options to the shopt builtin (ccoommppaatt3311, ccoommppaatt3322, ccoomm--
ppaatt4400, ccoommppaatt4411, and so on). There is only one current compatibility
level -- each option is mutually exclusive. The compatibility level is
intended to allow users to select behavior from previous versions that
is incompatible with newer versions while they migrate scripts to use
current features and behavior. It's intended to be a temporary solu-
tion.
This section does not mention behavior that is standard for a particu-
lar version (e.g., setting ccoommppaatt3322 means that quoting the right hand
side of the regexp matching operator quotes special regexp characters
in the word, which is default behavior in bash-3.2 and subsequent ver-
sions).
If a user enables, say, ccoommppaatt3322, it may affect the behavior of other
compatibility levels up to and including the current compatibility
level. The idea is that each compatibility level controls behavior
that changed in that version of bbaasshh, but that behavior may have been
present in earlier versions. For instance, the change to use locale-
based comparisons with the [[[[ command came in bash-4.1, and earlier
versions used ASCII-based comparisons, so enabling ccoommppaatt3322 will enable
ASCII-based comparisons as well. That granularity may not be suffi-
cient for all uses, and as a result users should employ compatibility
levels carefully. Read the documentation for a particular feature to
find out the current behavior.
Bash-4.3 introduced a new shell variable: BBAASSHH__CCOOMMPPAATT. The value as-
signed to this variable (a decimal version number like 4.2, or an inte-
ger corresponding to the ccoommppaatt_N_N option, like 42) determines the com-
patibility level.
Starting with bash-4.4, bbaasshh began deprecating older compatibility lev-
els. Eventually, the options will be removed in favor of BBAASSHH__CCOOMMPPAATT.
Bash-5.0 was the final version for which there was an individual shopt
option for the previous version. BBAASSHH__CCOOMMPPAATT is the only mechanism to
control the compatibility level in versions newer than bash-5.0.
The following table describes the behavior changes controlled by each
compatibility level setting. The ccoommppaatt_N_N tag is used as shorthand for
setting the compatibility level to _N_N using one of the following mecha-
nisms. For versions prior to bash-5.0, the compatibility level may be
set using the corresponding ccoommppaatt_N_N shopt option. For bash-4.3 and
later versions, the BBAASSHH__CCOOMMPPAATT variable is preferred, and it is re-
quired for bash-5.1 and later versions.
ccoommppaatt3311
+o Quoting the rhs of the [[[[ command's regexp matching oper-
ator (=~) has no special effect.
ccoommppaatt3322
+o The << and >> operators to the [[[[ command do not consider
the current locale when comparing strings; they use ASCII
ordering.
ccoommppaatt4400
+o The << and >> operators to the [[[[ command do not consider
the current locale when comparing strings; they use ASCII
ordering. BBaasshh versions prior to bash-4.1 use ASCII col-
lation and _s_t_r_c_m_p(3); bash-4.1 and later use the current
locale's collation sequence and _s_t_r_c_o_l_l(3).
ccoommppaatt4411
+o In posix mode, ttiimmee may be followed by options and still
be recognized as a reserved word (this is POSIX interpre-
tation 267).
+o In _p_o_s_i_x mode, the parser requires that an even number of
single quotes occur in the _w_o_r_d portion of a double-
quoted parameter expansion and treats them specially, so
that characters within the single quotes are considered
quoted (this is POSIX interpretation 221).
ccoommppaatt4422
+o The replacement string in double-quoted pattern substitu-
tion does not undergo quote removal, as it does in ver-
sions after bash-4.2.
+o In posix mode, single quotes are considered special when
expanding the _w_o_r_d portion of a double-quoted parameter
expansion and can be used to quote a closing brace or
other special character (this is part of POSIX interpre-
tation 221); in later versions, single quotes are not
special within double-quoted word expansions.
ccoommppaatt4433
+o Word expansion errors are considered non-fatal errors
that cause the current command to fail, even in posix
mode (the default behavior is to make them fatal errors
that cause the shell to exit).
+o When executing a shell function, the loop state
(while/until/etc.) is not reset, so bbrreeaakk or ccoonnttiinnuuee in
that function will break or continue loops in the calling
context. Bash-4.4 and later reset the loop state to pre-
vent this.
ccoommppaatt4444
+o The shell sets up the values used by BBAASSHH__AARRGGVV and
BBAASSHH__AARRGGCC so they can expand to the shell's positional
parameters even if extended debugging mode is not en-
abled.
+o A subshell inherits loops from its parent context, so
bbrreeaakk or ccoonnttiinnuuee will cause the subshell to exit.
Bash-5.0 and later reset the loop state to prevent the
exit
+o Variable assignments preceding builtins like eexxppoorrtt and
rreeaaddoonnllyy that set attributes continue to affect variables
with the same name in the calling environment even if the
shell is not in posix mode.
ccoommppaatt5500
+o Bash-5.1 changed the way $$RRAANNDDOOMM is generated to intro-
duce slightly more randomness. If the shell compatibil-
ity level is set to 50 or lower, it reverts to the method
from bash-5.0 and previous versions, so seeding the ran-
dom number generator by assigning a value to RRAANNDDOOMM will
produce the same sequence as in bash-5.0.
+o If the command hash table is empty, bash versions prior
to bash-5.1 printed an informational message to that ef-
fect, even when producing output that can be reused as
input. Bash-5.1 suppresses that message when the --ll op-
tion is supplied.
ccoommppaatt5511
+o The uunnsseett builtin treats attempts to unset array sub-
scripts @@ and ** differently depending on whether the ar-
ray is indexed or associative, and differently than in
previous versions.
+o Arithmetic commands ( ((((...)))) ) and the expressions in an
arithmetic for statement can be expanded more than once.
+o Expressions used as arguments to arithmetic operators in
the [[[[ conditional command can be expanded more than
once.
+o The expressions in substring parameter brace expansion
can be expanded more than once.
+o The expressions in the $$((((...)))) word expansion can be ex-
panded more than once.
+o Arithmetic expressions used as indexed array subscripts
can be expanded more than once.
+o tteesstt --vv, when given an argument of AA[[@@]], where AA is an
existing associative array, will return true if the array
has any set elements. Bash-5.2 will look for and report
on a key named @@.
+o The ${_p_a_r_a_m_e_t_e_r[[::]]==_v_a_l_u_e} word expansion will return
_v_a_l_u_e, before any variable-specific transformations have
been performed (e.g., converting to lowercase). Bash-5.2
will return the final value assigned to the variable.
+o Parsing command substitutions will behave as if extended
globbing (see the description of the sshhoopptt builtin above)
is enabled, so that parsing a command substitution con-
taining an extglob pattern (say, as part of a shell func-
tion) will not fail. This assumes the intent is to en-
able extglob before the command is executed and word ex-
pansions are performed. It will fail at word expansion
time if extglob hasn't been enabled by the time the com-
mand is executed.
ccoommppaatt5522
+o The tteesstt builtin uses its historical algorithm to parse
parenthesized subexpressions when given five or more ar-
guments.
+o If the --pp or --PP option is supplied to the bbiinndd builtin,
bbiinndd treats any arguments remaining after option process-
ing as bindable command names, and displays any key se-
quences bound to those commands, instead of treating the
arguments as key sequences to bind.
RREESSTTRRIICCTTEEDD SSHHEELLLL
If bbaasshh is started with the name rrbbaasshh, or the --rr option is supplied at
invocation, the shell becomes _r_e_s_t_r_i_c_t_e_d. A restricted shell is used
to set up an environment more controlled than the standard shell. It
behaves identically to bbaasshh with the exception that the following are
disallowed or not performed:
+o Changing directories with ccdd.
+o Setting or unsetting the values of SSHHEELLLL, PPAATTHH, HHIISSTTFFIILLEE, EENNVV,
or BBAASSHH__EENNVV.
+o Specifying command names containing //.
+o Specifying a filename containing a // as an argument to the ..
builtin command.
+o Using the --pp option to the .. builtin command to specify a
search path.
+o Specifying a filename containing a slash as an argument to the
hhiissttoorryy builtin command.
+o Specifying a filename containing a slash as an argument to the
--pp option to the hhaasshh builtin command.
+o Importing function definitions from the shell environment at
startup.
+o Parsing the values of BBAASSHHOOPPTTSS and SSHHEELLLLOOPPTTSS from the shell en-
vironment at startup.
+o Redirecting output using the >, >|, <>, >&, &>, and >> redirec-
tion operators.
+o Using the eexxeecc builtin command to replace the shell with another
command.
+o Adding or deleting builtin commands with the --ff and --dd options
to the eennaabbllee builtin command.
+o Using the eennaabbllee builtin command to enable disabled shell
builtins.
+o Specifying the --pp option to the ccoommmmaanndd builtin command.
+o Turning off restricted mode with sseett ++rr or sshhoopptt --uu rree--
ssttrriicctteedd__sshheellll.
These restrictions are enforced after any startup files are read.
When a command that is found to be a shell script is executed (see CCOOMM--
MMAANNDD EEXXEECCUUTTIIOONN above), rrbbaasshh turns off any restrictions in the shell
spawned to execute the script.
SSEEEE AALLSSOO
_B_a_s_h _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l, Brian Fox and Chet Ramey
_T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
_T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
_P_o_r_t_a_b_l_e _O_p_e_r_a_t_i_n_g _S_y_s_t_e_m _I_n_t_e_r_f_a_c_e _(_P_O_S_I_X_) _P_a_r_t _2_: _S_h_e_l_l _a_n_d _U_t_i_l_i_-
_t_i_e_s, IEEE --
http://pubs.opengroup.org/onlinepubs/9799919799/
http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
_s_h(1), _k_s_h(1), _c_s_h(1)
_e_m_a_c_s(1), _v_i(1)
_r_e_a_d_l_i_n_e(3)
FFIILLEESS
_/_b_i_n_/_b_a_s_h
The bbaasshh executable
_/_e_t_c_/_p_r_o_f_i_l_e
The systemwide initialization file, executed for login shells
_~_/_._b_a_s_h___p_r_o_f_i_l_e
The personal initialization file, executed for login shells
_~_/_._b_a_s_h_r_c
The individual per-interactive-shell startup file
_~_/_._b_a_s_h___l_o_g_o_u_t
The individual login shell cleanup file, executed when a login
shell exits
_~_/_._b_a_s_h___h_i_s_t_o_r_y
The default value of HHIISSTTFFIILLEE, the file in which bash saves the
command history
_~_/_._i_n_p_u_t_r_c
Individual _r_e_a_d_l_i_n_e initialization file
AAUUTTHHOORRSS
Brian Fox, Free Software Foundation
bfox@gnu.org
Chet Ramey, Case Western Reserve University
chet.ramey@case.edu
BBUUGG RREEPPOORRTTSS
If you find a bug in bbaasshh, you should report it. But first, you should
make sure that it really is a bug, and that it appears in the latest
version of bbaasshh. The latest version is always available from
_f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_g_n_u_/_b_a_s_h_/ and _h_t_t_p_:_/_/_g_i_t_._s_a_v_a_n_-
_n_a_h_._g_n_u_._o_r_g_/_c_g_i_t_/_b_a_s_h_._g_i_t_/_s_n_a_p_s_h_o_t_/_b_a_s_h_-_m_a_s_t_e_r_._t_a_r_._g_z.
Once you have determined that a bug actually exists, use the _b_a_s_h_b_u_g
command to submit a bug report. If you have a fix, you are encouraged
to mail that as well! You may send suggestions and "philosophical" bug
reports to _b_u_g_-_b_a_s_h_@_g_n_u_._o_r_g or post them to the Usenet newsgroup
ggnnuu..bbaasshh..bbuugg.
ALL bug reports should include:
The version number of bbaasshh
The hardware and operating system
The compiler used to compile
A description of the bug behavior
A short script or "recipe" which exercises the bug
_b_a_s_h_b_u_g inserts the first three items automatically into the template
it provides for filing a bug report.
Comments and bug reports concerning this manual page should be directed
to _c_h_e_t_._r_a_m_e_y_@_c_a_s_e_._e_d_u.
BBUUGGSS
It's too big and too slow.
There are some subtle differences between bbaasshh and traditional versions
of sshh, mostly because of the POSIX specification.
Aliases are confusing in some uses.
Shell builtin commands and functions are not stoppable/restartable.
Compound commands and command lists of the form "a ; b ; c" are not
handled gracefully when combined with process suspension. When a
process is stopped, the shell immediately executes the next command in
the list or breaks out of any existing loops. It suffices to enclose
the command in parentheses to force it into a subshell, which may be
stopped as a unit, or to start the command in the background and imme-
diately bring it into the foreground.
Array variables may not (yet) be exported.
GNU Bash 5.3 2025 April 7 _B_A_S_H(1)
|